apple oauth 三方登录

网站需要使用apple 三方登录,研究了一下,记录如下:

目录

 配置

正式开发(oauth2.0)

1.登录授权页面

2.接收授权码code,向apple服务器申请token


 配置

我们拥有一个苹果开发者账号后,需要进行相关配置,会得到一些id和文件,苹果官方配置文档如下:https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple

1.配置结束后,将获得俩个文件 三个ID和一个回调URL

redirectURI = 'https://abc.baidu.com/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

苹果官方文档

前端文档:

https://developer.apple.com/documentation/sign_in_with_apple

后端文档:https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api

1.登录授权页面

就是一个html页面,会显示一个苹果登录的按钮,点击登录按钮后,会跳转到认证页面

代码如下:

<html>
    <head>
    </head>
    <body>
        <script type="text/javascript" src="https://appleid.cdn-apple.com/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页面,正式开发是手动拼接跳转授权页地址。

https://appleid.apple.com/auth/authorize?client_id=xxxxxxxxx&redirect_uri=xxxxxxxxx&response_type=xxxxxxxx&scope=email name&response_mode=[RESPONSE_MODE]&state=xxxxxxxxx
如果手动拼接的话 response_type 应设为 coderesponse_mode应设为form_post

2.接收授权码code,向apple服务器申请token

用户授权后,会向设置的 redirect_uri带着code发送一个post请求,还有设置的state,id_token(第一次授权登录没有这个字段),如果第一次授权登录,会返回用户信息user(第一次登录才有user信息,后面不能获取到,需要保存到服务端,如果再次获取,需要用户手动取消appleid在该应用程序上的授权)

苹果官方文档如下,Handle the Response部分有对返回参数的解释

https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/incorporating_sign_in_with_apple_into_other_platforms

特别注意 :用户取消后,会返回error(user_cancelled_authorize)给redirect_uri,这种情况也是需要处理的

苹果post请求如下:

 下一步做的是服务端发起一个post请求利用授权码code去申请令牌

苹果官方文档如下:

https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens

请求的url为:POST https://appleid.apple.com/auth/token

注意:  Content-Type: application/x-www-form-urlencoded

获取令牌参数:

  • grant_type:'authorization_code'为获取令牌
  • client_id:client_id
  • redirect_uri:redirect_uri
  • code:上一步获取到的授权码,code
  • client_secret:一个生成的JWT

刷新令牌参数:

  • grant_type:'refresh_token'为刷新令牌
  • client_id:client_id
  • client_secret:client_secret,
  • refresh_token:上一步获取到的id_token

 关于生成client_secret

苹果官方说生成jwt最长时间期限为6个月,可以每次都生成一个jwt


苹果官方文档 Creating the Client Secret 部分说明如下:

这里就需要用到上面获得的TEAM ID 、CLIENT ID 和 KEY ID

https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens

然后我们服务端 post 请求到 https://appleid.apple.com/auth/token 来获取令牌,

获取参数如下:

 其中的id_token 解密后,会获得用户信息 email和sub(用户身份标识),sub可以存到数据库与用户信息关联

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
GitLab支持OAuth 2.0登录,您可以通过以下步骤进行设置: 1. 在GitLab中创建一个应用程序: - 登录到您的GitLab帐户。 - 转到“设置”>“应用程序”>“授权应用程序”。 - 点击“新建应用程序”按钮。 - 填写应用程序的名称、重定向URI和其他相关信息。重定向URI是授权成功后将重定向的URL地址,一般是您的应用程序的登录页面。 - 提交并保存应用程序。 2. 获取OAuth 2.0凭证: - 在应用程序创建成功后,您将获得一个应用程序的Client ID和Client Secret。这些凭证将用于验证和授权请求。 3. 配置您的应用程序: - 在您的应用程序中,根据所使用的编程语言和框架,配置OAuth 2.0客户端库。 - 使用Client ID和Client Secret配置OAuth 2.0客户端库的授权请求。 4. 实现登录流程: - 在您的应用程序中,提供一个登录链接或登录按钮,使用户能够选择使用GitLab登录。 - 当用户点击登录链接或登录按钮时,将会跳转到GitLab的授权页面。 - 用户在GitLab上进行身份验证后,将被重定向回您的应用程序,并携带一个授权码。 - 使用授权码向GitLab请求访问令牌。 - 使用访问令牌进行进一步的API请求或用户信息获取。 以上是GitLab OAuth 2.0登录的基本步骤,具体的实现细节会根据您所使用的编程语言和框架而有所不同。您可以参考GitLab的文档和官方示例代码,以获取更具体的指导和实现细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值