C# NET内核。如何在没有身份用户帐户的情况下创建身份验证cookie?
我的应用程序创建一个C# NET内核。如何在没有身份用户帐户的情况下创建身份验证cookie?,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,我的应用程序创建一个Guid事件令牌 客户访问活动的url时会这样做。 然后将客户重定向到登录表单以提供事件密码 如果密码无效,则事件令牌客户将能够看到事件。 我可以在没有身份用户帐户的情况下进行密码转换吗?(在本例中,我不希望遵循经典的用户身份登录方法) 可能类似于创建一个auth cookie并在接下来的请求中使用它 [HttpPost] [Route("validate/{code}")] public IActionResult Cookie(string code
Guid
事件令牌
客户访问活动的url时会这样做。
然后将客户重定向到登录表单以提供事件密码
如果密码无效,则事件令牌客户将能够看到事件。
我可以在没有身份用户帐户的情况下进行密码转换吗?(在本例中,我不希望遵循经典的用户身份登录方法)
可能类似于创建一个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();
}
我想,我理解你的意思。您希望在身份验证框架中创建自定义Owin。使用JWT令牌也可以实现同样的效果。它比OWIN身份验证具有优势 但如果您想使用OWIN设计类似的东西,请注意以下几点:
- 首先也是最重要的一点,在url中传递的参数不应该有任何密码或敏感值。URL令牌应该被编码(对于编码,u可以引用),并且编码的令牌可以携带此信息。编码时,您可以对someID(不是电子邮件地址)、某个sourcecd(告诉令牌来自有效源)、某个时间限制以及该令牌有效的次数进行编码
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);
您还应该在中间层中配置OWIN层。您可以基于.Net framework或.Net Core在中间层配置OWIN,目标是创建一个身份验证令牌,对吗?它可以通过验证GUID或标识用户帐户来实现。@MiteshPrajapati实际上没有用户帐户。目标是使用用户提供的url令牌和密码(如果组合匹配)创建一个身份验证cookie,而不是设置GUID,您可以创建JWT令牌并将所有信息放入其中。在登录而不是根据数据库进行验证时,您可以根据JWT令牌进行验证,并在所有验证都得到验证的情况下创建实际的身份验证令牌。我当然希望您在
code
中不要以纯文本形式发送密码。。。
using Microsoft.Owin.Security;
private IAuthenticationManager authenticationManager;
public IAuthenticationManager AuthenticationManager
{
get
{
if (authenticationManager == null)
authenticationManager = HttpContext.GetOwinContext().Authentication;
return authenticationManager;
}
set { authenticationManager = value; }
}