我需要将我的网站升级(或降级)为使用本地登录页面。我使用以下代码
使用混合流程完成了所有工作app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions(){});
然后当令牌返回时,它将允许我访问以完成asp.net中的身份验证逻辑 - 设置声明身份,委托人等。
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions()
{
Notifications = new OpenIdConnectAuthenticationNotifications()
{
SecurityTokenValidated = async n =>
{
// perform transform, etc..
n.AuthenticationTicket = new AuthenticationTicket(
identity, n.AuthenticationTicket.Properties);
await Task.FromResult(0);
}
}
});
现在,我将从MVC操作方法中收集用户名和密码。我可以通过这种方式从客户端获取访问令牌。
[HttpPost]
public ActionResult Login(LoginModel model)
{
var client = new TokenClient(
StsSettings.TokenEndpoint,
ClientId,
Secret);
var x = client.RequestResourceOwnerPasswordAsync(model.UserName, model.Password, "customid openid").Result;
return View(model);
}
但我不确定告诉ASP.NET指向我的自定义登录页面而不是身份服务器的最简单方法。我会使用表单身份验证逻辑并创建一些AuthenticationTicket吗?此外,设置ClaimsIdentity
的最佳方式是什么(我知道如何获得索赔,只需要一个"钩子")
答案 0 :(得分:0)
如果您希望资源所有者密码流的结果是登录用户,则需要发出主身份验证cookie以及您对该新身份验证用户的声明。
var claims = new Claim[] {
new Claim("name", username),
new Claim("sub", "4848784904"),
new Claim("email", "BrockAllen@gmail.com"),
new Claim("role", "Admin"),
new Claim("role", "Dev"),
};
// "Cookies" is the name of your cookie middleware,
// so change to match what you're actually using in Startup.cs
var ci = new ClaimsIdentity(claims, "Cookies", "name", "role");
Request.GetOwinContext().Authentication.SignIn(ci);
return Redirect("~/Home/Secure");