web-dev-qa-db-ja.com

ASP.NET Identityにクレームを追加する方法

ASP.NET Identityを使用してMVC 5のユーザーIDにカスタムクレームを追加する方法のドキュメントまたは例を見つけようとしています。この例では、OWINセキュリティパイプラインのどこにクレームを挿入するか、およびフォーム認証を使用してそれらをCookieに保持する方法を示す必要があります。

52
Kevin Junghans

おそらく 次の記事 が役立ちます:

var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, "Brock"));
claims.Add(new Claim(ClaimTypes.Email, "[email protected]"));
var id = new ClaimsIdentity(claims,DefaultAuthenticationTypes.ApplicationCookie);

var ctx = Request.GetOwinContext();
var authenticationManager = ctx.Authentication;
authenticationManager.SignIn(id);
40
Vlince

ASP.NET MVC 5プロジェクトテンプレートを使用している場合、ApplicationUser.csにクレームを追加する正しい場所です。 Add custom user claims hereを検索するだけです。これにより、GenerateUserIdentityAsyncメソッドが表示されます。これは、ASP.NET IDシステムがApplicationUserオブジェクトを取得し、それをClaimsIdentityに変換する必要があるときに呼び出されるメソッドです。次のコード行が表示されます。

// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

その後はコメントです:

// Add custom user claims here

そして最後に、アイデンティティを返します:

return userIdentity;

したがって、カスタムクレームを追加する場合、GenerateUserIdentityAsyncは次のようになります。

// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

// Add custom user claims here
userIdentity.AddClaim(new Claim("myCustomClaim", "value of claim"));

return userIdentity;
60
dprothero

登録時にカスタムクレームを追加する場合、このコードは機能します。

            var user = new ApplicationUser
            {
                UserName = model.UserName,
                Email = model.Email
            };
            var result = await UserManager.CreateAsync(user, model.Password);
            // Associate the role with the new user 
            await UserManager.AddToRoleAsync(user.Id, model.UserRole);
            // Create customized claim 
            await UserManager.AddClaimAsync(user.Id, new Claim("newCustomClaim", "claimValue"));
            if (result.Succeeded)
            {...etc
4
Uwe Köhler

wEB API Cで次のことができます#

var identity = new ClaimsIdentity(context.Options.AuthenticationType);          
        foreach(var Rol in roles)
        {
            identity.AddClaim(new Claim(ClaimTypes.Role, Rol));
        }
        identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
        identity.AddClaim(new Claim(ClaimTypes.Email, user.Correo));
        identity.AddClaim(new Claim(ClaimTypes.MobilePhone, user.Celular));
        identity.AddClaim(new Claim("FullName", user.FullName));
        identity.AddClaim(new Claim("Empresa", user.Empresa));
        identity.AddClaim(new Claim("ConnectionStringsName", user.ConnectionStringsName));

....

2
Maurico Bello