IdentityServer3 同步用户与客户端应用程序
IdentityServer3 Sync users with client app
我有以下设置:
- 用于身份验证的 IdenetityServer3 (OAUth / OpenID)
- ASP.NET WebApi 后端
- Ember-cli UI
我的授权流程运行良好 - 我还没有设法让管理员 UI 正常工作,但我可以预填充用户、范围和客户端,这样就没问题了。
当用户针对 IdentityServer3 进行身份验证时,他们将被重定向回 UI 并且 UI 使用 oidc-client 从 JWT 检索用户信息 - 客户端也使用不记名令牌发送到 API 以验证请求 - 一切正常。
我的问题是 IddentityServer 负责身份验证/授权 - 但 API 还没有任何用户概念 - 但它需要那个。
在 IdentityServer 和我的 API 之间同步用户信息的最佳方式是什么?我怎样才能最好地管理角色和用户层次结构之类的东西? API 有没有办法为此查询 IdentityServer?当我们有一个管理所有这些的身份服务器时,将用户信息的副本本地保存到 API 似乎很愚蠢。
IdentityServer 公开了一个 UserInfo 端点 (https://identityserver.github.io/Documentation/docsv2/endpoints/userinfo.html),您可以调用它来检索有关用户的其他信息。
但是,只要有可能,请尝试通过传递具有相关声明数量的令牌来实现您的需要,这样您就可以在无需调用身份服务器的情况下做出 AuthZ 决策。这减少了耦合,意味着您的 API.
的出站呼叫更少
例如当您登录时,可以创建一个 JWT 令牌,其中包含用户所属的角色以及用户的唯一 ID(子声明)
{
"iss": "https://my.api.com/trust",
"aud": "https://my.api.com",
"exp": 1512748805,
"nbf": 1481212805,
"scope": "openid",
"sub": "83b0451a718b4d54b930d6fe9cb7b442",
"idp": "site",
"roles": [
"role1",
"role2"
]
}
您的 API 现在可以只检查提交给它的声明并说 'To call this API endpoint, the token presented to me must have role2 in the roles claim'。
您也可以使用范围执行此操作,使用 scope attribute
一个设计良好的 JWT 令牌将包含适量的信息来做出 AuthZ 决策,而无需大量额外调用,同时保持令牌的整体大小尽可能小 - 请记住,它包含在每个请求中。
我有以下设置:
- 用于身份验证的 IdenetityServer3 (OAUth / OpenID)
- ASP.NET WebApi 后端
- Ember-cli UI
我的授权流程运行良好 - 我还没有设法让管理员 UI 正常工作,但我可以预填充用户、范围和客户端,这样就没问题了。
当用户针对 IdentityServer3 进行身份验证时,他们将被重定向回 UI 并且 UI 使用 oidc-client 从 JWT 检索用户信息 - 客户端也使用不记名令牌发送到 API 以验证请求 - 一切正常。
我的问题是 IddentityServer 负责身份验证/授权 - 但 API 还没有任何用户概念 - 但它需要那个。
在 IdentityServer 和我的 API 之间同步用户信息的最佳方式是什么?我怎样才能最好地管理角色和用户层次结构之类的东西? API 有没有办法为此查询 IdentityServer?当我们有一个管理所有这些的身份服务器时,将用户信息的副本本地保存到 API 似乎很愚蠢。
IdentityServer 公开了一个 UserInfo 端点 (https://identityserver.github.io/Documentation/docsv2/endpoints/userinfo.html),您可以调用它来检索有关用户的其他信息。
但是,只要有可能,请尝试通过传递具有相关声明数量的令牌来实现您的需要,这样您就可以在无需调用身份服务器的情况下做出 AuthZ 决策。这减少了耦合,意味着您的 API.
的出站呼叫更少例如当您登录时,可以创建一个 JWT 令牌,其中包含用户所属的角色以及用户的唯一 ID(子声明)
{
"iss": "https://my.api.com/trust",
"aud": "https://my.api.com",
"exp": 1512748805,
"nbf": 1481212805,
"scope": "openid",
"sub": "83b0451a718b4d54b930d6fe9cb7b442",
"idp": "site",
"roles": [
"role1",
"role2"
]
}
您的 API 现在可以只检查提交给它的声明并说 'To call this API endpoint, the token presented to me must have role2 in the roles claim'。
您也可以使用范围执行此操作,使用 scope attribute
一个设计良好的 JWT 令牌将包含适量的信息来做出 AuthZ 决策,而无需大量额外调用,同时保持令牌的整体大小尽可能小 - 请记住,它包含在每个请求中。