そこで、PluralSight のいくつかのガイドと公開されているガイドを使用して、IdentityServer4 のセットアップを試みてきました。
Core2.1 ですべてを動作させることができますが、Core3.1 で IdentityServer4 を構築しようとするとすぐに (フレームワークのすべての最新リリースと、Core2.1 の例とまったく同じ構成で)、私の webAPI はできません。トークンが存在する場合でも、クライアント アプリケーションを承認します。
WebAPI は、IdentityServer3.Contrib.AccessTokenValidation パッケージを使用する .NET4.x プロジェクトです。
IDP スタートアップ構成 (Core2.1 および Core3.1 プロジェクトで同じ):
services
.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddTestUsers(SeedData.GetUsers())
.AddInMemoryIdentityResources(SeedData.GetIdentityResources())
.AddInMemoryApiResources(SeedData.GetApiResources())
.AddInMemoryClients(SeedData.GetClients());
WebAPI スタートアップ構成 (IdentityServer3.Contrib.AccessTokenValidation) は Core2.1 IdentityServer4 では機能しますが、Core3.1 IdentityServer4 では機能しません
public void Configuration(IAppBuilder app) {
app.UseIdentityServerBearerTokenAuthentication(new IdentityServer3.AccessTokenValidation.IdentityServerBearerTokenAuthenticationOptions() {
Authority = "https://localhost:44314/",
ClientId = "kpcwebapi",
RequiredScopes = new[] { "kpcwebapi" },
});
}
クライアント アプリケーションの構成は Core2.1 IdentityServer4 では機能しますが、Core3.1 IdentityServer4 では機能しません
services.AddOpenIdConnect("oidc", options => {
options.SignInScheme = "Cookies";
options.Authority = "https://localhost:44314/";
options.ClientId = "testHybrid";
options.ResponseType = "code id_token";
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("kpcwebapi");
options.SaveTokens = true;
options.ClientSecret = "secret";
options.GetClaimsFromUserInfoEndpoint = true;
options.ClaimActions.Remove("amr");
options.ClaimActions.DeleteClaim("sid");
options.ClaimActions.DeleteClaim("idp");
options.TokenValidationParameters = new TokenValidationParameters {
NameClaimType = JwtClaimTypes.GivenName,
RoleClaimType = JwtClaimTypes.Role,
};
});
すべてがCore2.1で完全に機能するため、構成が正しいと確信しています 私の質問は、自分で見つけることができないため、WebAPIが機能しなくなったCore3.1 IdentityServer4で何かが変更されましたか? IdentityServer4 (Core3.1 用) の最新リリースに大きなバグ/問題があると思い始めています... OpenIDConnect を使用しているため... IdentityServer の更新時に認証は引き続き機能するはずですか?
面白いことに、API の開始時に、IDP が実行されていないときはいつでも例外が発生します。IDP が実行されている場合は、エラーや障害なしでステートメントを渡します。したがって、私の API は実際に IDP (Core2.1 と Core3.1 の両方) への接続を確立しますが、Core3.1 IDP の場合、クライアント アプリから受信した呼び出しは認証/承認されません。
Core3.1で動作させるために2週間の時間を失ったので、誰かが私が間違っていることを知っている場合は、それを共有していただければ幸いです...