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