を使用IdentityServer3 OpenID Connect authenticationして保護するアプリケーションを構築していますRESTful APIs。
アクセスには、UIに登録されている Implicit Flow クライアントを使用していますIS3。OIDC 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 つのフローをうまく組み合わせる方法を考えられますか?