我的应用创建了一个Guid
事件令牌
客户如此访问事件的网址。 https://example.com/event/a3b2e538-e87c-4444-a655-5171f263ac70
然后将客户重定向到登录表单以提供事件密码。
如果密码有效,则事件令牌客户将能够看到事件。 我可以不使用身份用户帐户来完成此功能吗? (在这种情况下,我不希望遵循传统的用户身份登录方法。)
也许会在即将到来的请求中创建一个auth cookie并使用它。
[HttpPost]
[Route("validate/{code}")]
public IActionResult Cookie(string code)
{
var user = true; //Validate event token against event password supplied by user
if (user == true)
{
var ident = _userManager.CreateAuthCookie(user, DefaultAuthenticationTypes.ApplicationCookie);
HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties { IsPersistent = false }, ident);
return Redirect("Wherever");
}
ModelState.AddModelError("", "Invalid login attempt");
return View();
}
答案 0 :(得分:1)
我想,我理解你的意思。您要创建自定义的Owin身份验证框架。使用JWT令牌可以实现相同的目的。与OWIN身份验证相比,它具有优势。
但是,如果您想使用OWIN设计类似的东西,请注意以下几点:
现在,当您获得对API端点的调用时,可以解码该令牌,进行验证,然后提取该someID,然后调用您的数据库以了解用户是否有效。
重要:编码和解码算法在这里起着非常重要的作用。因此,您的编码和解码令牌不应在任何地方公开。
如果他是有效用户,则创建一个ClaimsIdentity对象。
ClaimsIdentity identity = new ClaimsIdentity();
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, identity.FindFirst("sub").Value));
identity.AddClaim(new Claim("Name", <<add your claims like this>>));
identity = new ClaimsIdentity(identity.Claims, "ApplicationCookie");
AuthenticationProperties properties = new AuthenticationProperties();
AuthenticationManager.SignIn(properties, identity);
在控制器中或在单独文件中的设置身份验证类对象:
using Microsoft.Owin.Security;
private IAuthenticationManager authenticationManager;
public IAuthenticationManager AuthenticationManager
{
get
{
if (authenticationManager == null)
authenticationManager = HttpContext.GetOwinContext().Authentication;
return authenticationManager;
}
set { authenticationManager = value; }
}
还应该在中间层中配置OWIN层。您可以基于.Net框架或.Net Core配置OWIN中间层