IdentityServer3与客户端应用同步用户



我有以下设置:

  • auth(oauth/openID)
  • 的idenetityServer3
  • asp.net webapi后端
  • ember-cli ui

我的验证流程正常工作 - 我还没有设法使管理员UI工作,但是我可以预填充用户,范围和客户端,所以很好。

当用户针对IdentityServer3验证时,将其重定向回UI,并且UI使用OIDC -CLIENT从JWT中检索用户信息 - 客户端还使用携带者令牌发送到API发送到API来验证请求 - 所有好。

我的问题是,IDDENTITYSERVER负责身份验证/授权 - 但是API尚未对用户有任何概念 - 但它需要。

在IdentityServer和我的API之间同步用户信息的最佳方法是什么?我如何最好地管理角色和用户层次结构之类的事情?API是否有办法为此查询身份服务器?当我们拥有管理所有这些的身份服务器时

IdentityServer公开一个UserInfo端点(https://indistityserver.github.io/documentation/docsv2/endpoints/endpoints/userinfo.html),您可以致电以检索有关用户的其他信息。

但是,在可能的情况下,尝试通过传递具有相关索赔数量的令牌来实现所需的目标,以便您可以做出authz决策而无需拨打身份服务器。这减少了耦合,这意味着您的API的出站电话更少。

例如。当您登录时,可以创建一个JWT令牌,其中包含用户是plus用户唯一ID(sub Sipper)

的角色
{
  "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现在只能检查提出的索赔,并说"称此API端点,给我的令牌必须在角色主张中具有角色2"。

您也可以使用范围属性

使用范围来执行此操作。

设计良好的JWT代币将包含适量的信息来做出Authz决策,而无需其他额外的呼叫,同时将令牌的整体尺寸保持尽可能小 - 请记住,它包含在每个请求中。

最新更新