使用的插件

  • https://pub.dev/packages/sign_in_with_apple

    集成测试 Apple 登录

    添加 Apple 登录

    这里有两种方式:

    1、从 XCode 直接添加

    image.png

    2、从网页添加并更新 Profile

    image.png

    调起 Apple 登录

    ```dart import ‘package:sign_in_with_apple/sign_in_with_apple.dart’;

final credential = await SignInWithApple.getAppleIDCredential( scopes: [ AppleIDAuthorizationScopes.email, AppleIDAuthorizationScopes.fullName, ], state: “app_${Platform.operatingSystem}”, ); debugPrint(‘credential:${credential.toString()}’); debugPrint(‘authorizationCode:${credential.authorizationCode}’);

  1. <a name="80aem"></a>
  2. ### 拿到用户信息和 code
  3. ```dart
  4. // 只有第一次可以拿到姓名、邮箱这些信息,其他时候需要从服务端拿
  5. flutter: credential:AuthorizationAppleID(001429.c0bad140496440a1985e71ac6b6afb5d.0731, null, null, null, authorizationCode set? true, app_ios)
  6. flutter: authorizationCode:c70db3e5ac1dd4195b085f660e0f7c9bd.0.rrusz.5gxjcLwawV23QyBC2TZyFQ

服务端验证用户

创建一个 key,拿到私钥后面用

image.png

AppleLogin Key

AuthKey_F66TA542CY.p8.zip

验证用户并拿到用户信息

根据 Apple 的文档,我们需要通过 authorizationCode 验证用户并拿到用户信息,我们需要准备下面的信息:

  1. key=F66TA542CY(上面生成的key Key Id)
  2. key_value=key 生成的私钥
  3. team_id = 'DRL7GUUB5S'(团队id)
  4. client_id = 'com.banjixiaoguanjia.app'app 标示id

生成 client_secret

  1. require 'jwt'
  2. key_file = 'AuthKey_F66TA542CY.p8'
  3. team_id = 'DRL7GUUB5S'
  4. client_id = 'com.banjixiaoguanjia.app'
  5. key_id = 'F66TA542CY'
  6. ecdsa_key = OpenSSL::PKey::EC.new IO.read key_file
  7. headers = {
  8. 'kid' => key_id
  9. }
  10. claims = {
  11. 'iss' => team_id,
  12. 'iat' => Time.now.to_i,
  13. 'exp' => Time.now.to_i + 86400*180,
  14. 'aud' => 'https://appleid.apple.com',
  15. 'sub' => client_id,
  16. }
  17. token = JWT.encode claims, ecdsa_key, 'ES256', headers
  18. puts token
  1. $ ruby client_secret.rb
  2. eyJraWQiOiJGNjZUQTU0MkNZIiwiYWxnIjoiRVMyNTYifQ.eyJpc3MiOiJEUkw3R1VVQjVTIiwiaWF0IjoxNjAzMjczMjA0LCJleHAiOjE2MTg4MjUyMDQsImF1ZCI6Imh0dHBzOi8vYXBwbGVpZC5hcHBsZS5jb20iLCJzdWIiOiJjb20uYmFuaml4aWFvZ3VhbmppYS5hcHAifQ.nVbl7doRL1qanbWk_voAT32WLxnuYa2C7oCIhVjPpf_wDYsLfJV3o2pHzcpvlJ3MnrMOTdiNj0ZIbpEXjfRgCQ

验证用户

image.png

获取用户信息

复制 id_token 值到 jwt.io 中可以直接解析出用户信息
image.png

参考链接