撤销帐户删除过程的Apple登录令牌



我对这一切的工作原理有点困惑。

我已经在我的原生iOS应用程序中实现了与苹果的登录,登录成功后,我会保存苹果提供的所有信息,如IdentityTokenUserIdauthorization代码。

已经审查过了,我们必须使用Apple REST API Revoke Tokens登录来实现Revoke token API端点,但我不清楚哪个是client_id,什么是client_secret,什么是令牌。

根据我的理解。

client_id是捆绑包ID吗?client_secret是苹果在登录过程中提供的identityToken吗?。。我刚刚存储了这个令牌并将其共享到我们的服务器,但收到了invalid_client错误

如果有人能解释我应该如何处理Apple流登录期间提供的信息(UserId、IdentityToken和AuthorizationCode),以便正确实现Revoke Tokens API,我将不胜感激。

在做了一些研究并花了几个小时后,了解流程。

需要注意的是,在我的情况下,我已经在原生iOS应用程序中实现了苹果登录选项。

以下是吊销令牌需要遵循的三个重要步骤。

  1. 从Apple登录(客户端)获取authorizationCode
  2. 通过auth\token(服务器端)使用authorizationCode获取刷新令牌或无到期时间的访问令牌
  3. 通过token\Revoke(服务器端)吊销刷新令牌或访问令牌

客户端(应用程序端):

  1. 从Apple登录获取authorizationCode
  • 成功登录应用程序后,您将从苹果本机didCompleteWithAuthorization委托调用中获得授权代码。

  • 收到授权代码后,您需要立即将代码发送到服务器,因为该代码仅供一次使用,有效期为五分钟。

    func authorizationController(controller: ASAuthorizationController,
    didCompleteWithAuthorization authorization: ASAuthorization) {
    if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
    let authorizationCode = String(data: appleIDCredential.authorizationCode!, encoding: .utf8)!
    }
    }
    

服务器端(后端):

  1. 使用
  • 一旦从客户端收到授权代码,您将需要通过auth\token验证此代码。

  • 向验证服务器(Apple服务器)发送授权请求时,请包含以下表单数据参数。

  • CCD_ 12=";com.demo.app";(您的应用程序捆绑包id)

  • client_secret=一个由开发人员生成的秘密JSON Web令牌,它使用与您的开发人员帐户关联的苹果私钥登录。

  • code=发送到您的应用的授权响应中收到的授权码

  • 重要信息:创建客户端机密(client_secret)从苹果开发者文档中获取参考。

    • JSON Web令牌(JWT)是一个开放标准(RFC 7519),定义了一种安全传输信息的方法。登录苹果需要JWT对每个验证请求进行授权。创建令牌,然后使用从Apple Developer下载的私钥进行签名。

    • 生成签名JWT:

        1. 创建JWT标头
        1. 创建JWT有效载荷
        1. 签署JWT
    • 要创建JWT,请在JWT标头中使用以下字段和值:

    alg-->用于对令牌进行签名的算法。对于使用Apple登录,请使用ES256。

    孩子->为使用与您的开发者帐户关联的Apple私钥登录生成的10个字符的密钥标识符。

    • JWT有效负载包含特定于使用Apple REST API登录和客户端应用程序的信息,如颁发者、主题和过期时间。在有效载荷中使用以下声明:

    -->使用与您的开发人员帐户关联的10个字符的团队ID。

    iat-->在注册时发布的声明表示您生成客户端机密的时间,以自Epoch以来的秒数表示,以UTC为单位。

    exp-->过期时间注册声明标识客户端机密过期的时间。该值不得大于服务器上"当前UNIX时间"的15777000(6个月,以秒为单位)。

    aud-->https://appleid.apple.com.

    ->使用与client_id相同的值。该值区分大小写。(应用程序捆绑包id)。

  • 创建JWT后,使用带有p-256曲线的椭圆曲线数字签名算法(ECDSA)和SHA-256哈希算法对其进行签名。解码后的client_secretJWT令牌具有以下格式:

    {
    "alg": "ES256",
    "kid": "AEBD123DEPG"
    }
    { 
    "iss": "EED153GJIJ",
    "iat": 1437179036,
    "exp": 1493298100,
    "aud": "https://appleid.apple.com",
    "sub": "com.demo.app"
    }
    
  • 服务器验证刷新令牌后,端点返回身份令牌和访问令牌。以下是刷新令牌验证响应的示例:

    {
    "access_token": "beg3456...67Or9",
    "token_type": "Bearer",
    "expires_in": 3600,
    "id_token": "eyPgkk...96sZg"
    }
    

通过token\Revoke(服务器端)撤销刷新令牌或访问令牌

  • 为了撤销用户的授权,您必须获得在步骤(2)中获得的有效刷新令牌或访问令牌。

  • 一旦您有了有效的刷新或access_token,您就可以通过token\revoke端点撤销令牌。

  • 服务器需要以下参数才能使令牌无效。

  • CCD_ 19=";com.demo.app";(您的应用程序捆绑包id)

  • CCD_ 20=";一个秘密的JSON Web令牌,与您在步骤2中生成的方式相同;。

  • token=access_token,这是您从步骤2的端点调用中得到的。

一旦访问令牌撤销,客户端就会收到相同的通知,因为该客户端需要添加下面的观察者。

func addObserverforRevokeAppleSignToken() {
let sessionNotificationName = ASAuthorizationAppleIDProvider.credentialRevokedNotification
NotificationCenter.default.addObserver(forName: sessionNotificationName, object: nil, queue: nil) { (notification: Notification) in
// Sign user out
print("Apple sign in token revoked....")
}
}

您可以查看设置-密码&安全性>使用Apple ID的应用程序

谢谢。

基于文档Revoke Tokens:

  • client_id-应用程序的标识符(应用程序ID或服务ID)
  • client_secret-一个秘密的JSON Web令牌(JWT),它使用与您的开发人员帐户关联的苹果私钥登录。有关创建客户端机密的更多信息,请参阅生成和验证令牌
  • token-打算撤销的用户刷新令牌或访问令牌。如果请求成功,则撤销与所提供的令牌相关联的用户会话

client_id

我不是100%确定,但值得尝试以下内容:

  1. 转到https://appstoreconnect.apple.com
  2. 选择My Apps
  3. 选择你的应用
  4. 在边栏上选择App Information
  5. 您将看到Apple ID(10位数字id)

尝试使用此10位id作为client_id

相关内容

  • 没有找到相关文章

最新更新