如何在 OAuth2 访问令牌中为资源服务器添加特定信息的正确方法?

How is the correct way to add specific information for Resource Server inside OAuth2 access token?

我有一个场景,我的资源服务器 (RS) 可以连接到多个数据库并且它可以是多租户的。它有一个环境配置,我可以说:Env A 指向数据库 A 并且属于租户 A; Env B 指向数据库 B,属于租户 B;

我们的桌面应用程序将该信息存储在一个数据结构中,该数据结构在每次调用时发送到 RS,而我们的网络应用程序将其存储在 ASP.NET 会话中。用户 select 登录时的环境。

现在我们正在将我们的 API 完全转移到 REST 服务,并使用 IdentityServer4 通过 oAuth2 保护它们。

我需要将该环境值发送到 API,我认为这应该是访问令牌的一部分。

第一个问题是:这样对吗?访问令牌可以包含此类信息吗?

第二个是:哪个是最好的 IdentityServer4 服务,我应该扩展该服务以将该值作为声明注入到访问令牌中,并因此注入到 ClaimsPrincipal 中。

第三个是:有时我没有用户在登录时 select 环境(例如,客户端凭据授予)。在这种情况下,将环境视为客户索赔是否正确?有没有办法让动态客户索赔?

抱歉问题太长了!

此致, 迪奥戈

如果该声明是关于用户(或客户)身份的 - 是 - 它是令牌的候选者。

将声明添加到代表您的 API 的资源范围 - 这样声明类型将在配置文件服务中请求,您可以将其添加到令牌。

虽然客户声明不是动态的。