Asp.net Identity 2.0自定义登录方法

2024-01-11

我正在使用 Identity 2.0 开发 ASP.NET 5 应用程序。我有两种类型的用户:

  1. 正常 - 他们使用标准登录方法进行身份验证。
  2. 临时 - 他们应该根据提供的令牌登录。

我不想存储临时用户,除了验证用户所需的信息(某些用户名和令牌)。如果用户提供用户名和有效密码,他应该登录。

我不知道如何实现这一目标。


您也可以同时在这两种情况下使用身份。对于第一个场景,使用身份就像您之前所做的那样,没有任何更改,但对于第二个场景,您对登录方法进行了轻微的修改。

public ActionResoult TempLogin(string username, string password)
{
    // imaging you have own temp user manager, completely independent from identity
    if(_tempUserManager.IsValid(username,password))         
    {
        // user is valid, going to authenticate user for my App
        var ident = new ClaimsIdentity(
        new[] 
        {
            // adding following 2 claim just for supporting default antiforgery provider
            new Claim(ClaimTypes.NameIdentifier, username),
            new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string"),

            // an optional claim you could omit this 
            new Claim(ClaimTypes.Name, username),

            // you could even add some role
            new Claim(ClaimTypes.Role, "TempUser"),
            new Claim(ClaimTypes.Role, "AnotherRole"),
            // and so on
        },
        DefaultAuthenticationTypes.ApplicationCookie);

        // Identity is sign in user based on claim don't matter 
        // how you generated it Identity 
        HttpContext.GetOwinContext().Authentication.SignIn(
            new AuthenticationProperties { IsPersistent = false }, ident);

        // auth is succeed, 
        return RedirectToAction("MyAction"); 
     }
     ModelState.AddModelError("", "We could not authorize you :(");
     return View();
}

由于我们将逻辑注入到 Identity 中,因此我们根本不需要做额外的事情。

[Authorize]
public ActionResult MySecretAction()
{
    // all authorized users could use this method don't matter how has been authenticated
    // we have access current user principal by calling also
    // HttpContext.User
}

[Authorize(Roles="TempUser")]
public ActionResult MySecretAction()
{
    // just temp users have accesses to this method
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asp.net Identity 2.0自定义登录方法 的相关文章

随机推荐