2

を使用IdentityServer3 OpenID Connect authenticationして保護するアプリケーションを構築していますRESTful APIs

アクセスには、UIに登録されている Implicit Flow クライアントを使用していますIS3OIDC Owin Security moduleStartup クラスは への接続をセットアップしますIS3。すべてうまくいきます。

このアプリケーションの次の要件はREST API、 web だけUIでなく、他のサービスからもアクセスできることです。Client Credential Flow は要件を満たしているようです。REST APIポイントは、サービスがログインページへのリダイレクトを介して私たちに連絡し、IS3そこでユーザー名/パスワードを入力することは現実的ではないということです. クライアント資格情報フローのクライアントは、IS3サーバーでトークンを直接取得し、REST API.

Startup クラスは次のようになります。

internal class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // The Bearer token authentication is used for service to service
        // REST API access (also for testing purposes)
        app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {
            Authority = ConfigurationManager.AppSettings["IdmUrl"],
            NameClaimType = "client_id",
            RoleClaimType = "client_role"
            // ...
        });

        // OIDC authentication is used for UI access
        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            Authority = ConfigurationManager.AppSettings["IdmUrl"],
            // ...
        }
    }
}

これは、ブラウザを介して人がアクセスし、暗黙的なフローとクライアント資格情報フローを使用するサービスを使用する、両方のケースでうまく機能します。ただし、サービスがクライアント資格情報フローで使用しているトークンの有効期限が切れると、要求はIS3再びサーバーにリダイレクトされます。401 errorクライアントが新しいトークンを再度取得する必要があることを認識できるように、それを返したいと考えています。

2 つのフローをうまく組み合わせる方法を考えられますか?

4

1 に答える 1

1

401 の無許可のリダイレクトだけでなく、UI を使用した 302 リダイレクトも許可するには、こちら(Identity Server の作成者の 1 人による) のようなソリューションを実装する必要があります。

この場合、AJAX の検出を追加して設定を微調整しapp.UseCookieAuthentication()、AJAX 要求が検出された場合にのみログイン ページにリダイレクトします。これをニーズに合わせて調整できるはずです。

于 2015-08-21T13:15:16.493 に答える