我正在尝试创建自己的AuthenticationHandler并使用Cookie身份验证:
java.net.BindException: Address already in use
。
ps -ef | grep netty
这在实践中有效,但我觉得有点奇怪我在services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = MyAuth.Scheme;
})
.AddCookie()
.AddScheme<MyAuthenticationOptions, MyAuthenticationHandler>(MyAuth.Scheme, "My auth scheme", options => { });
进行实际身份验证,如果失败则重定向。
从另一个(MyAuthenticationHandler)调用一个AuthenticationHandler(cookie)对我来说似乎很奇怪。
如何正确设置,以便我在public MyAuthenticationHandler(...) : base(...) {}
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
throw new NotImplementedException();
}
protected override async Task HandleChallengeAsync(AuthenticationProperties properties)
{
var myUser = await DoAuth();
if (!myUser.IsAuthenticated)
{
if (Context.Request.Query.ContainsKey("isRedirectedFromSSO"))
{
Context.Response.Redirect("/unauthorized");
return;
}
else
{
Context.Response.Redirect("url to sso");
return;
}
}
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, user.Username),
};
var identity = new ClaimsIdentity(claims, MyAuth.Scheme);
var claimsPrincipal = new ClaimsPrincipal(identity);
var authProperties = new AuthenticationProperties {};
await Context.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
claimsPrincipal,
authProperties);
Context.Response.Redirect(Request.GetEncodedUrl());
}
}
执行此操作?
在我当前的实现中,该方法实际上从未被调用过。
另外,可以从另一个调用一个身份验证处理程序吗?
P.S。我查看过其他一些帖子和文章(包括this,this和this),但我无法通过查看问题找到问题的答案。任何帮助将不胜感激。
答案 0 :(得分:2)
我认为您之后的内容可以通过ASP.NET Core 2.1中的一些新内容来解决
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.1.0-rc1-final" />
以下是如何&#34;选择&#34;的示例。基于httpcontext数据的身份验证方案:
builder.AddPolicyScheme("scheme", "scheme", opts =>
{
opts.ForwardDefaultSelector = ctx =>
{
if (ctx.Request.Query.ContainsKey("isRedirectedFromSSO"))
{
return null; // or ctx.ForbidAsync(), not sure here.
}
return OpenIdConnectDefaults.AuthenticationScheme; // or your own sso scheme, whatever it may be here.
};
})
.AddCookie()
.AddOpenIdConnect();