2017-10-16 10 views
0

暗黙のフローを使用してIdentity Server 4で認証するアプリケーションがあります。アプリケーションは、2つの独立した.netコアアプリケーションに分かれています。 1つのアプリケーションがバックエンドを処理し、他のアプリケーションがフロントエンドを処理します。クライアント間でアクセストークンを共有する

バックエンドとフロントエンドは、同じスコープ、API名、および権限設定を共有します。

私はサードパーティと統合する予定です。私たちのバックエンドアプリケーションは、サードパーティアプリケーションを呼び出します。サードパーティアプリケーションへの呼び出しが確実に認証されるようにする必要があります。バックエンドアプリケーションがフロントエンドから受け取ったアクセストークンを共有し、それを第三者アプリケーションに送信したいと思います。私はこれを行うために必要なセットアップがはっきりしていません。

新しいクライアントをアイデンティティ・サーバーに追加して、サード・パーティーが必要とする必要なスコープのみで設定できると考えました。しかし、私のローカルテストでは、これを動作させることができませんでした。 IDX10804設定を取得できません... /。well-known/openid-configuration - セキュリティエラーが発生しました。

私の設定は次のようになります。

  new Client 
      { 
       ClientId = "thirdPartyClient", 
       ClientName = "thirdPartyClient", 
       AllowedGrantTypes = GrantTypes.HybridAndClientCredentials, 
       ClientSecrets = 
       { 
        new Secret("secret".Sha256()) 
       }, 
       AllowedScopes = 
       { 
        IdentityServerConstants.StandardScopes.OpenId, 
        IdentityServerConstants.StandardScopes.Profile, 
        IdentityServerConstants.StandardScopes.Email 
       }, 

       AllowOfflineAccess = true, 
       AllowAccessTokensViaBrowser = true, 
       RequireConsent = false 
      }, 

      new Client 
      { 
       ClientId = "myapplication", 
       ClientName = "myapplication", 
       AllowedGrantTypes = GrantTypes.Implicit, 
       ClientSecrets = 
       { 
        new Secret("secret".Sha256()) 
       }, 


       RedirectUris = { "https://.../callback.html" }, 
       PostLogoutRedirectUris = { "https://.../index.html" 
       AllowedCorsOrigins = { "https://..." }, 
       AllowedScopes = 
       { 
        IdentityServerConstants.StandardScopes.OpenId, 
        IdentityServerConstants.StandardScopes.Profile, 
        IdentityServerConstants.StandardScopes.Email, 
        IdentityServerConstants.StandardScopes.Address, 
        "myscope", 
       }, 

       AllowOfflineAccess = true, 
       AllowAccessTokensViaBrowser = true, 
       RequireConsent = false 
      } 

私はこれについて正しい道を行くのだろうか?

+0

ステータスとは? – MJK

答えて

0

クライアントのリダイレクトURIを追加していませんthirdPartyClient。リダイレクトしないと、クライアントは有効になりません。 RedirectUris

あなたは無効にちょうど私のコードでdetailed loggingをオンにした場合

にトークンまたは認証コードを返すことが許可されたURIを指定します。エラーログで実際の理由を確認できます

+0

詳細なログを試みます。 thirdPartyClientのために、コールフローは次のとおりです。 1.ユーザーがブラウザで何らかのアクションが 2.ブラウザは、当社のC#のWeb API呼び出しを行い 3.当社のC#のWeb APIはthirdPartyClient 4. thirdPartyClientが行うアクションとリターンを呼び出しますHTTP応答 5. C#Web APIが応答を受信し、結果をユーザーのブラウザに返します。 このフローでは、ユーザーはUIを終了しません。この場合、リダイレクトURIは必要ですか? しかし、最終的には、ユーザーがリンクをクリックしてリンクがSSOを実行し、ユーザーをサードパーティのUIにログインさせるフローを追加する必要があります。 –

+0

@RiazAhmad 'RedirectUris = {" https://.../callback.html "}、' ClientId = "thirdPartyClient"の部分が欠けています、それを追加しようとしましたか? – MJK

+0

IDX10804エラーを修正しました。これは権限urlの単純な無効な設定であり、ローカルでhttpで実行されます。 解決済みで、「視聴者が無効です」というエラーが表示されます。クライアントIDが異なるため、同じアクセストークンを再利用できないようです。 ClientId = "thirdPartyClient"の代わりにClientId = "myapplication"を使用すると、エラーは消えます。それはトークンが署名されているために以来のことです。これはマイクロサービスアーキテクチャでどのように動作するはずですか?すべてのサービスで同じクライアントIDを使用する必要がありますか?最初のログインが別のクライアントIDからのものだった場合、SSOを実行するにはどうすればよいですか? –

関連する問題