使用 IdentityServer 时,来自 Google 的 saving/accessing 外部声明的最佳实践是什么?

When using IdentityServer, what is the best practice of saving/accessing external claims from Google?

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

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

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

收回这些声明的最干净的方法是什么?明确地说,我想在用户调用 /userinfo 时从 Google 获取声明,并将它们转换为我的应用程序的声明命名约定。 (如果可能的话,我不想在登录时将它们存储在 id_token 中……根据 OIDC 规范)

注意:问题与我的类似,但没有说明如何使用 IdentityServer3 来完成。

是的,您将需要一些持久性机制来处理来自外部提供商的声明。您应该已经有了这个,因为您从 IdentityServer 发出的主题声明对于您的令牌服务应该是唯一的(而不是 google 给您的唯一 ID)。