ログインページから外部APIを使用してユーザーを認証する必要があります。外部APIからの認証が成功すると、セッションにAuthTokenを保存します。要求は、私は、次の認証ハンドラASP.Netコアのカスタム認証メカニズム
public class ExtApiStoreRequirement : IAuthorizationRequirement
{
}
public class ExtApiAuthorizationHandler : AuthorizationHandler<ExtApiStoreRequirement>
{
IHttpContextAccessor _accessor;
public ExtApiAuthorizationHandler(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ExtApiStoreRequirement requirement)
{
var authState = GET_AUTH_FROM_SESSION(_accessor.HttpContext.Session);
if (authState!=null)
{
_accessor.HttpContext.Response.Redirect("/Account/Login");
//context.Fail(); <-- I removed that because it was responding an empty page
context.Succeed(requirement);
}
else
context.Succeed(requirement);
return Task.CompletedTask;
}
}
を有効作成していると私は私のstartup.cs
services.AddAuthorization(options =>
{
options.AddPolicy("ExtApi",
policy => policy.Requirements.Add(new ExtApiStoreRequirement()));
});
でこのアプローチを、このハンドラを登録しているかどうかをチェックするために
は作業が、私ドンれます私はリダイレクションのためにcontext.Succeed(requirement);
に電話をしなければならないので、自信を持って感じることはできません。私がcontext.Fail()
と呼ぶと、リダイレクトは起こらず、私が見るのは空のページだけです。
この方法でセキュリティ上の問題はありますか?安全に使用できますか?
承認されていない場合、ログインページへのリダイレクトはどこにありますか? –
あなたが正しいです、私はこれを逃した。 'HandleUnauthorizedAsync'をリダイレクトに置き換えることができます。私の更新を参照してください。 –