我目前正在Salesforce中实现各种社交登录流程。(免责声明:我知道Apple/Google集成在SF中已经存在,但由于一些技术原因,我必须开发一个自定义实现)
这样的实现基本上需要三个步骤:
- 获取授权码
- 使用授权码 获取访问令牌
- 使用访问令牌获取用户信息
我设法实现了Google完美的社交登录。
我正在为Apple的第3步而挣扎.说到获取用户信息,Google提供端点URL:https://www.googleapis.com/oauth2/v3/userinfo
在做了一些研究之后,我找不到与Apple对应的.
有人能帮忙吗?
感谢苹果无法直接获取用户信息。相反,Sign in with Apple流在来自授权端点的第一个响应中发送用户信息。流程如下:
- 用户点击"Sign in with apple";在你的web应用
- 你的后端构造一个请求到
https://appleid.apple.com/auth/authorize
与clientId和状态和重定向浏览器到该 - 苹果提供一个登录页面,然后询问用户是否想要与你的应用分享他们的名字和电子邮件
- 苹果的登录页面使用Javascript发送一个POST到你的后端与
x-www-form-urlencoded
参数:授权码,你的状态,加上一个JSON编码的user
参数。 - 你的后端发送一个POST到
https://appleid.apple.com/auth/token
来交换一个授权令牌代码。
对于Google,您将在步骤5之后查询info端点以获得用户名,但对于Apple,您必须从步骤4捕获user
参数。这是你获得用户数据的唯一地方——它只在用户第一次用苹果登录你的应用程序时提供。
步骤4中POST的参数在URL解码后如下所示:
state=4891aaebb8b9066e
code=c5600a9e2838d4dfc8829e51ede2f7ed0.0.rrwqr.xxxxxxxxxxxxxxxxxxxxxx
user={"name":{"firstName":"John","lastName":"Smith"},"email":"john@example.com"}