2016-12-11 175 views
0

我具有以下設置:IdentityServer3同步用戶提供客戶端應用程序

  • IdenetityServer3爲AUTH(OAUTH/OpenID的)
  • ASP.NET的WebAPI後端
  • 燼-CLI UI

我有驗證流程很好地工作 - 我還沒有設法讓管理用戶界面工作,但我可以預先填充用戶,範圍和客戶端,所以這很好。

當用戶對IdentityServer3進行身份驗證時,它們被重定向回UI,並且UI使用oidc-client從JWT檢索用戶信息 - 客戶端還使用不記名令牌將API發送到身份驗證請求 - 都好。

我的問題是,IddentityServer負責認證/授權 - 但API還沒有任何用戶的概念 - 但它需要。

在IdentityServer和我的API之間同步用戶信息的最佳方式是什麼?我如何才能最好地管理角色和用戶層次結構等事物?有沒有API爲此查詢IdentityServer的方法?當我們擁有管理所有這些的身份服務器時,它似乎愚蠢地將用戶信息的副本保存在API本地。

+1

我會創建一個API,並讓IS和您的API與它交談。膠水是唯一標識用戶的主題聲明。 – leastprivilege

回答

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端點,呈現給我的令牌必須在角色聲明中具有角色2'。

你也可以用示波器做到這一點,利用scope attribute

一個精心設計的智威湯遜令牌將包含的信息適量,而不需要大量的額外電話要打AuthZ的決策,同時保持的整體規模令牌儘可能小 - 請記住,它包含在每個請求中。

+0

謝謝@Dylan Morley - 我可以通過檢查令牌並複製/提取我需要的內容來更新用戶登錄API時的情況,但這並不能真正回答以下問題:(誰在daves部門,誰在詹姆斯下工作,讓我所有的'領先管理員'用戶)我需要擴展IS來照顧這個,如果是的話 - 什麼部分/如何? – iwayneo

+0

好的,就像leastprivilige評論說的那樣 - 有一個'用戶配置文件api'提供了詳細級別,然後你可以讓Identity Server +任何其他API從中檢索用戶詳細信息。 –