2016-10-21 5 views
0

外部のAPIに接続して、IdSrvrのカスタムUserServiceからユーザー資格情報を検証し、ユーザーのクレームを取得する必要がありますが、IdentityServerが別のサービスに接続するクライアント。IdentityServer3のUserServiceからのクライアント資格情報

どのようなアプローチが必要ですか?

まず最初に、UserService内のHttpClientインスタンスを作成してIdentityServer自体に接続し、リクエストを行うだけでした。しかし、より良い/よりクリーンな方法があるかどうかはわかりません。

答えて

2

OwinEnviroment拡張メソッドを使用すると、トークンを発行できます。

public MyCustomUserService(OwinEnvironmentService owin) 
    { 
     _owin = owin; 
    } 

    public async Task AuthenticateLocalAsync(LocalAuthenticationContext context) 
    { 

     var token = await _owin.Environment.IssueClientToken(
      clientId: "Banana", 
      scope: "resource1", 
      lifetime: 3600); 

     // call protected API with token 
    } 

Link to GitHub issue with same question

+0

ありがとうたくさん!これは魅力的に機能しました! – CesarD

0

これには、ResourceOwner Grantというグラントがあります。それに応じてspecをお読みください。

リソース所有者とクライアントとの間の 信頼度が高い場合に資格情報のみ(例えば、クライアント は、デバイスのオペレーティングシステムまたは高度に特権
アプリケーションの一部である)が使用されるべきである

ほとんどの人は、アプリケーションがOIDCの考え方に反するユーザーの資格情報を渡す必要がある反パターンとしてこの許可を使用しないことを強くお勧めします。この助成金は主にここにあり、レガシー目的で使用されます。

+0

たぶん私は十分に自分自身が良い説明していませんでした:私は私の組織のためにユーザーを認証するサービスを持っており、基本的にはRESTfulなAPIです。さて、IdentityServerのUserServiceから、AuthenticateLocalAsyncの間にIdSrvrのユーザを検証するために呼び出す必要があります。 今、認証APIへの呼び出しで送信するトークンを自分自身に発行するためにIdSrvrが必要です。そして、_that_は、何が最高の/クリーナーであるべきかを判断しようとしています。 リソースオーナー資格認可は、ユーザがアプリケーションにログインしているときに使用するためにsupossedですが、サービス間です(IdSrvrからauth api) – CesarD

+2

この種のIDS4のこのポストを思い出させます。正直言って私はこのような何かを行うべき天気を知らない。 http://stackoverflow.com/questions/39981755/is-there-a-way-to-generate-an-access-token-from-within-identity-server-without-u ユーザーの皆様のような声はアクセス可能です別のWeb APIでは、この非常にアプリケーションは、ユーザー情報を必要とするアイデンティティプロバイダの信頼関係者です。基本的には、UserService内から有効なトークンが必要です。正直言って、私はこれがきれいだが、あなたがしなければならないことをしなければならないと確信していません。私はあなたの解決策がうまくいくと思います。 – Lutando

+0

はい、あなたが投稿した質問とあなたが説明した方法とほとんど同じです。 ええ、それはひどいのですが、ADから、また別の人事制度からユーザーを掴んで、両方の部分からユーザー全体を検証する必要があるため、認証APIがあります...ユーザー資格情報が正しくバリデーション結果と一緒に返された検証結果(OKの場合)...そして、すべてのロジックをIdSrvr内部に持っていくことはあまり意味がありません。 今後のご意見はお待ちしております。あなたのおかげで。 – CesarD

関連する問題