使用的插件
- https://pub.dev/packages/sign_in_with_apple
集成测试 Apple 登录
添加 Apple 登录
这里有两种方式:1、从 XCode 直接添加
2、从网页添加并更新 Profile
调起 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}’);
<a name="80aem"></a>
### 拿到用户信息和 code
```dart
// 只有第一次可以拿到姓名、邮箱这些信息,其他时候需要从服务端拿
flutter: credential:AuthorizationAppleID(001429.c0bad140496440a1985e71ac6b6afb5d.0731, null, null, null, authorizationCode set? true, app_ios)
flutter: authorizationCode:c70db3e5ac1dd4195b085f660e0f7c9bd.0.rrusz.5gxjcLwawV23QyBC2TZyFQ
服务端验证用户
创建一个 key,拿到私钥后面用
AppleLogin Key
验证用户并拿到用户信息
根据 Apple 的文档,我们需要通过 authorizationCode
验证用户并拿到用户信息,我们需要准备下面的信息:
key=F66TA542CY(上面生成的key 的 Key Id)
key_value=key 生成的私钥
team_id = 'DRL7GUUB5S'(团队id)
client_id = 'com.banjixiaoguanjia.app'(app 标示id)
生成 client_secret
require 'jwt'
key_file = 'AuthKey_F66TA542CY.p8'
team_id = 'DRL7GUUB5S'
client_id = 'com.banjixiaoguanjia.app'
key_id = 'F66TA542CY'
ecdsa_key = OpenSSL::PKey::EC.new IO.read key_file
headers = {
'kid' => key_id
}
claims = {
'iss' => team_id,
'iat' => Time.now.to_i,
'exp' => Time.now.to_i + 86400*180,
'aud' => 'https://appleid.apple.com',
'sub' => client_id,
}
token = JWT.encode claims, ecdsa_key, 'ES256', headers
puts token
$ ruby client_secret.rb
eyJraWQiOiJGNjZUQTU0MkNZIiwiYWxnIjoiRVMyNTYifQ.eyJpc3MiOiJEUkw3R1VVQjVTIiwiaWF0IjoxNjAzMjczMjA0LCJleHAiOjE2MTg4MjUyMDQsImF1ZCI6Imh0dHBzOi8vYXBwbGVpZC5hcHBsZS5jb20iLCJzdWIiOiJjb20uYmFuaml4aWFvZ3VhbmppYS5hcHAifQ.nVbl7doRL1qanbWk_voAT32WLxnuYa2C7oCIhVjPpf_wDYsLfJV3o2pHzcpvlJ3MnrMOTdiNj0ZIbpEXjfRgCQ
验证用户
获取用户信息
复制 id_token
值到 jwt.io 中可以直接解析出用户信息
参考链接
- https://developer.apple.com/forums/thread/118135
- https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens
- https://pub.dev/packages/sign_in_with_apple
- https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple
- https://glitch.com/edit/#!/flutter-sign-in-with-apple-example
- https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple/overview/buttons/