我的IdentityServer应用程序配置为使用Google登录。我正在使用OIDC。这个问题是关于外部索赔的。
在登录时,我的应用程序可以访问Google从auth请求发回的所有声明。我可以在我的UserServiceBase的自定义实现中通过AuthenticateExternalAsync方法(通过上下文)访问它们。我什至可以将它们添加到AuthenticateResult对象中,以便在用户接受同意后执行GetProfileDataAsync时,可以通过ProfileDataRequestContext.Subject.Claims列表访问它们。但这是他们记忆中的最后一点。
如果我没有将这些声明保存在数据库中,那么登录过程结束后如何访问它们?我想使id_token保持简单,以便不将声明(除了sub)放入令牌中。因此,我需要调用/ userinfo端点以获取声明,但是到了这一点,它们不再存在于内存中。
收回这些索赔的最干净的方法是什么?明确地说,我想在用户调用/ userinfo时从Google获得声明,并将其转换为我的应用程序的声明命名约定。(我不想在登录时将它们存储在id_token中……根据OIDC规范)
注意:这个问题与我的相似,但是没有解决如何使用IdentityServer3的问题。
是的,您将需要某种持久性机制来处理来自外部提供程序的声明。您应该已经有了这个,因为主题声称您从IdentityServer发行的内容对于您的令牌服务应该是唯一的(而不是google为您提供的唯一ID)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句