簡體   English   中英

ASP.NET身份數據庫第一個自定義用戶和角色

[英]ASP.NET Identity Database First custom user and role

我們正在嘗試使用OWIN和.Net Identity實施Web API項目以進行身份​​驗證。 我們有針對用戶和角色的自定義數據庫表,因此我們需要采用數據庫優先的方法進行EF。

我設法使身份可以與我們的自定義帳戶表一起使用(由於其他stackoverflow線程),但是我一直堅持讓角色起作用...

總之,到目前為止,我已經完成了使用以下功能實現的自定義IUserStore

public class IdentityUserStore<TUser> : 
    IUserStore<TUser>, where TUser : IdentityUser
{

    ....

    public Task<TUser> FindByNameAsync(string userName)
    {
        //throw new NotImplementedException();
        IdentityUser user = null;

        Account result = _accountRepo.GetByEmail(userName);

        if (result != null)
        {
            user = new IdentityUser()
            {
                Id = result.Code,
                UserName = result.Email,
                SecurityStamp = result.SecurityStamp,
                PasswordHash = result.PasswordHash,
            };
        }

        return Task.FromResult<TUser>(user as TUser);
    }

    ....
}

**請注意,帳戶實體沒有繼承IUser,因此我必須手動映射IdentityUser所需的最少數據。

然后重寫GrantResourceOwnerCredentials函數,如下所示

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{

        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

        UserManager<IdentityUser> _userManager = new UserManager<IdentityUser>(new IdentityUserStore<IdentityUser>());
        IdentityUser user = await _userManager.FindAsync(context.UserName, context.Password);

        if (user == null)
        {
            context.SetError("invalid_grant", "The user name or password is incorrect.");
            return;
        }

        var identity = new ClaimsIdentity(context.Options.AuthenticationType);
        identity.AddClaim(new Claim("sub", context.UserName));
        identity.AddClaim(new Claim("role", "user"));

        context.Validated(identity);

}

有了上述內容,[Authorize]屬性就可以使用,但是由於角色信息不可用,所以我們無法獲得[Authorize(Roles =“ XXX”)]。

誰能幫我指出從自定義數據庫表中檢索用戶角色的正確方向,以便它與.Net Identity框架一起使用?

謝謝!

上面的代碼的問題在於,您添加了一個角色類型(至少對於系統而言)未知的角色。 對於角色,預定義的聲明類型為http://schemas.microsoft.com/ws/2008/06/identity/claims/roleSystem.Security.Claims.ClaimTypes.Role 因此,請將您的代碼更改為

identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim(ClaimTypes.Role, "user"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM