我有以下设置:
- 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决策,而无需其他额外的呼叫,同时将令牌的整体尺寸保持尽可能小 - 请记住,它包含在每个请求中。