所以我尝试在我的spring boot后端应用程序中使用apple登录和rest api,一切正常!直到我尝试访问用户名,即使我要求 name
在范围内,苹果似乎没有发回这个名字,而且文档清楚地表明他们没有提供用户信息uri AppleJS
似乎返回了一个 user
响应有效负载中的对象
是的,我已经实现了自定义的oidc userdetails服务。
public class CompactOAuth2UserService implements OAuth2UserService<OidcUserRequest, OidcUser>
.
security:
oauth2:
client:
registration:
apple:
clientId: id
clientSecret: secret
authorizationGrantType: authorization_code
redirectUri: "{baseUrl}/oauth2/callback/{registrationId}"
scope:
- openid
- name
- email
clientName: Apple
clientAuthenticationMethod: post
provider:
apple:
authorizationUri: https://appleid.apple.com/auth/authorize?response_mode=form_post&response_type=code+id_token
tokenUri: https://appleid.apple.com/auth/token
jwkSetUri: https://appleid.apple.com/auth/keys
userNameAttribute: sub
如何获取用户名?如果不可能,这方面的最佳做法是什么?
1条答案
按热度按时间8ehkhllq1#
看起来像是
name
范围需要包含在/auth/authorize
终点。然后,它将作为一个整体包含在响应中user
像你提到的那样。注意:看起来,虽然,它将被分为名字和姓氏。发件人:https://developer.apple.com/forums/thread/118209
在中请求用户信息
id_token
(假设您通过/auth/authorize
RESTAPI),您需要包括scope
查询参数,它支持这些值-name
及email
. 您可以请求一个、两个或无。注意:对多个作用域使用空格分隔和百分比编码;例如
"scope=name%20email"
.那么,https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/incorporating_sign_in_with_apple_into_other_platforms
处理响应
当使用apple ui登录显示在打开的浏览器选项卡中时,用户可以登录并接受应用程序的任何条款和条件。苹果处理授权请求后,响应的处理取决于响应模式下的值:
...
成功的响应包含以下参数:
... 用户
包含scope属性中请求的数据的json字符串。返回的数据格式如下:{“name”:{“firstname”:string,“lastname”:string},“email”:string}