現在、Web API での owin ベアラー トークン認証の学習段階にあります。このコードは、トークンおよび Cookie ベースの認証を使用して実装されています。コードは
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
try
{
using (UserManager<ApplicationUser> userManager = userManagerFactory())
{
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null || user.IsDeleted)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
ClaimsIdentity oAuthIdentity = await userManager.CreateIdentityAsync(user,
context.Options.AuthenticationType);
ClaimsIdentity cookiesIdentity = await userManager.CreateIdentityAsync(user,
CookieAuthenticationDefaults.AuthenticationType);
var roleName = await GetRoleName(user.Roles.First().RoleId);
AuthenticationProperties properties = CreateProperties(user.UserName, roleName);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
}
catch (Exception ex)
{
throw ex;
}
}
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
// Resource owner password credentials does not provide a client ID.
if (context.ClientId == null)
{
context.Validated();
}
return Task.FromResult<object>(null);
}
public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
{
if (context.ClientId == _publicClientId)
{
Uri expectedRootUri = new Uri(context.Request.Uri, "/");
if (expectedRootUri.AbsoluteUri == context.RedirectUri)
{
context.Validated();
}
}
return Task.FromResult<object>(null);
}
コードは同僚によって実装されており、疑問があります。
トークン認証は、生成されたトークンに基づいています。ロールが「管理者」であるユーザーのトークンを生成しました。ユーザーが「管理者」ロールを持っているため、制限されたアクションにアクセスできるようになりました。しかしその後、同じ古いユーザーの役割を「ユーザー」に変更しました。現在、同じ古いトークンを使用して、彼が「管理者」にいなくてもリソースにアクセスできます。実際、これが追加のカスタムロジックで実装されているという記事をいくつか読みました。大丈夫です
今、私はユーザーパスワードを他のパスワードに変更しました。これで、同じ古いトークンでリソースにアクセスできます。短命のトークンを作成しても、これは良くないと思います。
誰もこれを逮捕するためにガイドしてください、または私は何かを逃しましたか? 「Authorization」ヘッダーでアクションを呼び出すときに実際に呼び出すメソッド