私はASP.netコアWeb APIを取得しようとしています。JSON Webトークン認証が正しく機能しています。私は、IdentityServer4とアプリケーションを正常に統合し、ASP.netのコアアイデンティティに基づいてログインを処理しています。ASP.Net Core Web APIアイデンティティを作成する方法無許可で401を返す
ただし、認証が失敗すると、APIはクライアントをログインページにリダイレクトしようとすると302の結果を返します。しかし、これは純粋なWeb APIであり、ユーザーページやユーザーが直接対話するものはありません。
ログインページにリダイレクトするのではなく、401を返すようにするにはどうすればよいですか?
ConfigureServicesのアイデンティティ部分は次のようになります。
// ASP.net Identity
var identityBackingStoreConnectionString = configuration["identity:backingStore"];
services
.AddIdentityWithMongoStoresUsingCustomTypes<MyApplicationUser, IdentityRole>(
identityBackingStoreConnectionString)
.AddDefaultTokenProviders();
services.AddSingleton<IClientStore, MyIdentityStore>();
// IdentityServer4
services.AddIdentityServer().AddTemporarySigningCredential()
.AddInMemoryApiResources(MyResourceStore.GetAllResources())
.AddAspNetIdentity<MyApplicationUser>()
.AddTemporarySigningCredential();
と構成の関連する(と思う)の部分は次のようになります。
app.UseIdentity();
app.UseIdentityServer();
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions()
{
Authority = "http://localhost:5000/",
RequireHttpsMetadata = false,
ApiName = "myapi",
AutomaticAuthenticate = true,
JwtBearerEvents = new JwtBearerEvents()
{
OnAuthenticationFailed = async context => context.Response.StatusCode = 401
}
});
app.UseMvc();
あなたが見ることができるように、私が試してみましたOnAuthenticationFailedイベントをオーバーライドしますが、使用できません。
システムを401に戻す方法については、何かアドバイスをいただければ幸いです。
私はUseWhenのアプローチを得ることができませんでしたが、2つのコンポーネントを別々のシステムに分けることは完全に機能しました。ご助力ありがとうございます! –