使用IdentityServer时,保存/访问Google的外部声明的最佳做法是什么?

时间:2017-01-03 20:07:42

标签: asp.net-web-api identityserver3

我的IdentityServer应用程序配置为使用Google登录。我正在使用OIDC。这个问题是关于外部索赔的。

在登录时,我的应用程序可以访问Google从身份验证请求发回的所有声明。我可以在方法AuthenticateExternalAsync(通过上下文)中的UserServiceBase的自定义实现中访问它们。我甚至可以将它们添加到AuthenticateResult对象中,因此当用户接受同意后执行GetProfileDataAsync时,我可以通过ProfileDataRequestContext.Subject.Claims列表访问它们。但这是他们记忆中的最后一点。

如果我不在数据库中保存这些声明,登录过程结束后如何访​​问它们?我想保持我的id_token简单,所以我不会在令牌中放置声明(除了sub)。因此,我需要调用/ userinfo端点来获取声明,但此时它们不再存在于内存中。

获得这些索赔的最简洁方法是什么?为了清楚起见,我希望在用户调用/ userinfo并将其转换为我的应用程序的声明命名约定时从Google获取声明。 (如果可能的话,我不想在登录时将它们存储在id_token中......根据OIDC规范)

注意:This问题类似于我的问题,但这并没有解决如何使用IdentityServer3来解决问题。

1 个答案:

答案 0 :(得分:0)

是的,您需要一些来自外部提供商的声明的持久性机制。您应该已经拥有此功能,因为主题声称您从IdentityServer发出的内容应该是您的令牌服务所独有的(而不是谷歌提供给您的唯一ID)。