OWINトークンベースの認証でWeb API 2を使用しています。ロールに基づく権限を除いて、すべてうまくいっています。私は役割管理を持つユーザーと自分のアプリケーションにログインしますが、私は、不正なエラー401が登録しようとしたときに取得する:認証エラー - トークンベースの承認とロールを持つASP.NET Web API
[Authorize(Roles = "Admin")]
[RoutePrefix("api/Account")]
public class AccountController : ApiController
{
..............
// POST api/Account/Register
//[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(AppUser user)
{
...............
問題は以下の通りです:
は、ここに私のコントローラです。私はすでに、AspNetUserRolesテーブルの管理者でログインするために使用しているAspNetUserを修正しました。ここで
は私のGrantResourceOwnerCredentials方法である:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
using (AuthRepository _repo = new AuthRepository(new GloboStudioUniversityContext()))
{
IdentityUser user = await _repo.FindUser(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"));
identity.AddClaim(new Claim(ClaimTypes.Role, "Admin"));
identity.AddClaim(new Claim(ClaimTypes.Role, "Student"));
identity.AddClaim(new Claim(ClaimTypes.Role, "Candidate"));
context.Validated(identity);
}
デバッグの目的でAuthorize属性を削除し、次にメソッド 'User.IsInRole(" Admin ")を呼び出して、すべてのクレームを繰り返して、ユーザーが実際にAdminグループの一部であるかどうかを調べることができます。 – Michael
私はすでにデバッグしていて、ユーザーが管理者グループに属していないことをIsInRoleが示しています。何が間違っているか不足していますか? –