appleoauth三⽅登录⽹站需要使⽤apple 三⽅登录,研究了⼀下,记录如下:
⽬录
配置
1.配置结束后,将获得俩个⽂件 三个ID和⼀个回调URL
redirectURI = 'abc.baidu/appleAuth' // ⾃⼰设置的重定向域名,可添加多个
webClientId = 'com.baidu.abc.signInWithApple'; // 设置的client_id,⼀般是域名的反写
teamId = 'JI87S9KI7D'; // 10个字符的team_id
keyId = 'KOI98S78J6'; // 获取的10个字符的密钥标识符
2.⼀个以p8结尾的⽂件,⽤作⽣成jwt ⽤来请求token
正式开发(oauth2.0)
正式开发前,可以先熟悉⼀下oauth2.0的认证流程
1.⽤户点击 导向到认证服务器
2.⽤户选择是否授权
3.授权后,认证服务器会带着授权码code请求重定向url
4.客户端获取到授权码code后,发送到后端服务器,然后⽤授权码code请求认证服务器
5.认证服务器验证授权码code 没问题后,返回access token 和refresh token
苹果官⽅⽂档
前端⽂档:
1.登录授权页⾯
就是⼀个html页⾯,会显⽰⼀个苹果登录的按钮,点击登录按钮后,会跳转到认证页⾯
代码如下:
<html>
<head>
</head>
<body>
<script type="text/javascript" src="appleid.cdn-apple/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
<div id="appleid-signin" data-color="black" data-border="true" data-type="sign in"></div>
<script type="text/javascript">
AppleID.auth.init({
clientId : 'xxxxxx',
scope : 'email name',
redirectURI: 'xxxxxxxxxxxxxxxxxx',
state : 'xxxxxxxxxxxx'
});
</script>
</body>
</html>
clientId:配置获得
scope:权限范围,⽤来获取⽤户信息 email name 其中⼀个或者两个都设置
redirectURI:回调url,⽤户同意授权后,会带code向回调url 发起⼀个post请求,后端服务器需要去接受授权码code,然后去申请令牌state:可以设定任意值,苹果认证服务器会返回这个值,可以利⽤这个参数来进⾏⼀些判断
我开发过程中,⾃⼰测试是利⽤上⾯的html页⾯,正式开发是⼿动拼接跳转授权页地址。
2.接收授权码code,向apple服务器申请token
⽤户授权后,会向设置的 redirect_uri带着code发送⼀个post请求,还有设置的state,id_token(第⼀次授权登录没有这个字段),如果第⼀次授权登录,会返回⽤户信息user(第⼀次登录才有user信息,后⾯不能获取到,需要保存到服务端,如果再次获取,需要⽤户⼿动取消appleid在该应⽤程序上的授权)
苹果官⽅⽂档如下,H andle the Response部分有对返回参数的解释
特别注意 :⽤户取消后,会返回error(user_cancelled_authorize)给redirect_uri,这种情况也是需要处理的
苹果post请求如下:
苹果apple id注册下⼀步做的是服务端发起⼀个post请求利⽤授权码code去申请令牌
苹果官⽅⽂档如下:
注意: Content-Type: application/x-www-form-urlencoded
获取令牌参数:
刷新令牌参数:
关于⽣成client_secret:
苹果官⽅说⽣成jwt最长时间期限为6个⽉,可以每次都⽣成⼀个jwt
苹果官⽅⽂档 Creating the Client Secret 部分说明如下:
这⾥就需要⽤到上⾯获得的TEAM ID 、CLIENT ID 和 KEY ID
获取参数如下:
其中的id_token 解密后,会获得⽤户信息 email和sub(⽤户⾝份标识),sub可以存到数据库与⽤户信息关联
发布评论