spring security apple登录

1cklez4t  于 2021-09-30  发布在  Java
关注(0)|答案(1)|浏览(621)

所以我尝试在我的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

如何获取用户名?如果不可能,这方面的最佳做法是什么?

8ehkhllq

8ehkhllq1#

看起来像是 name 范围需要包含在 /auth/authorize 终点。然后,它将作为一个整体包含在响应中 user 像你提到的那样。注意:看起来,虽然,它将被分为名字和姓氏。
发件人:https://developer.apple.com/forums/thread/118209
在中请求用户信息 id_token (假设您通过 /auth/authorize RESTAPI),您需要包括 scope 查询参数,它支持这些值- nameemail . 您可以请求一个、两个或无。
注意:对多个作用域使用空格分隔和百分比编码;例如 "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}

相关问题