2016-12-11 7 views
0

私は次のセットアップがあります:AUTH(OAuthの/ OpenIDの)ためIdentityServer3同期ユーザー

  • IdenetityServer3
  • ASP.NET WEBAPIバックUI
  • エンバー-cliの終了を

私は正常に動作する認証フローを持っています。私はまだ管理UIを稼働させることはできませんでしたが、ユーザー、スコープ、クライアントをあらかじめ準備しておくことができます。

ユーザーがIdentityServer3に対して認証すると、ユーザーはUIにリダイレクトされ、UIはoidc-clientを使用してJWTからユーザー情報を取得します。クライアントはベアラトークンを使用して、すべて良い。

私の問題は、IddentityServerが認証/認可を担当していますが、APIにはユーザーの概念はまだありませんが、それが必要です。

IdentityServerと私のAPIの間でユーザー情報を同期する最良の方法は何ですか?どのようにして、役割やユーザー階層などの管理を最適にすることができますか?このためにIdentityServerにクエリするAPIはありますか?これを管理するIDサーバがあると、APIのローカルにユーザ情報のコピーを保持しているように見えます。

+1

私はAPIを作成して、ISとあなたのAPIの両方に話すことにしました。接着剤は、ユーザーを一意に識別する主張の主張です。 – leastprivilege

答えて

0

IdentityServerは、ユーザーに関する追加情報を取得するために呼び出すことができるUserInfoエンドポイント(https://identityserver.github.io/Documentation/docsv2/endpoints/userinfo.html)を公開します。

ただし、可能な限り、関連する金額のトークンを渡して、Identity Serverを呼び出すことなく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 「このAPIエンドポイントを呼び出すには、私に提示されたトークンに役割の主張でrole2が必要です」と言う。

また、うまく設計されたJWTトークンは、全体のサイズを維持しながら、追加の呼び出しの多くを必要とせずのauthz決定を行うために情報の適切な量を含んでいますscope attribute

を使用して、スコープでこれを行うことができますトークンはできるだけ小さく - 覚えておいて、それはすべてのリクエストに含まれています。

+0

ありがとう@Dylan Morley - 私は彼らがトークンを検査し、必要なものをコピー/抽出することでAPIにログインするユーザーを更新することができますが、これは実際に質問に答えることはできません。(whoはdaves dept、私を「リード・アドミニストレーター」のすべてのユーザーにしてください)私はこれを世話するためにISを拡張する必要がありますか? – iwayneo

+0

これ以上のレベルの詳細を提供する 'ユーザープロファイルapi'を持っているので、Identity Server +と他のAPIの両方でユーザーの詳細を取得できます。 –

関連する問題