IdentityServer3使用客户端应用程序同步用户

时间:2016-12-11 10:00:25

标签: asp.net-web-api oauth openid identityserver3

我有以下设置:

  • IdenetityServer3 for auth(OAUth / OpenID)
  • ASP.NET WebApi后端
  • Ember-cli UI

我的auth流程运行良好 - 我还没有设法让管理UI工作但我可以预先填充用户,范围和客户端,这样就可以了。

当用户针对IdentityServer3进行身份验证时,会将其重定向回UI,并且UI使用oidc-client从JWT检索用户信息 - 客户端还使用承载令牌发送给API以进行身份​​验证请求 - 所有好。

我的问题是IddentityServer负责身份验证/授权 - 但API还没有任何用户概念 - 但它需要它。

在IdentityServer和我的API之间同步用户信息的最佳方法是什么?如何最好地管理角色和用户层次结构等内容?有没有办法让API为此查询IdentityServer?当我们有一个管理所有这些的身份服务器时,似乎很难在本地将用户信息的副本保存到API。

1 个答案:

答案 0 :(得分:0)

IdentityServer公开UserInfo端点(https://identityserver.github.io/Documentation/docsv2/endpoints/userinfo.html),您可以调用该端点以检索有关用户的其他信息。

但是,尽可能尝试通过传递具有相关索赔额的令牌来实现您所需的功能,这样您就可以在不需要调用Identity Server的情况下做出AuthZ决策。这样可以减少耦合,并且意味着您可以减少来自API的出站呼叫。

E.g。登录时,可以创建一个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现在只需检查提交给它的声明并说“要调用此API端点,呈现给我的令牌必须在角色声明中具有role2”。

您也可以使用scope attribute

对范围执行此操作

精心设计的JWT令牌将包含适当数量的信息,以便在不需要大量额外呼叫的情况下做出AuthZ决策,同时保持令牌的整体大小尽可能小 - 请记住,它包含在每个请求中。

相关问题