gpt4 book ai didi

c# - 不记名 token 不适用于我的 WebAPI 授权属性角色,用户名为空

转载 作者:行者123 更新时间:2023-11-30 23:12:06 25 4
gpt4 key购买 nike

  • 我可以登录并从 http://localhost:58507/token 获取 token key postman
  • 我可以只使用 [Authorize] 属性调用 api
  • 但是当我设置角色 [Authorize(Roles= "Admin")] 时,我得到了这个服务器内部错误:

"Message": "An error has occurred.",

"ExceptionMessage": "Value cannot be null. Parameter name: username",

"ExceptionType": "System.ArgumentNullException",

"StackTrace": "at System.Web.Util.SecUtility.CheckParameter(String& param, Boolean checkForNull, Boolean checkIfEmpty, Boolean checkForCommas, Int32 maxSize, String paramName)

这是我的代码:

  • AuthorizeAttribute 类:

public class AuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
base.HandleUnauthorizedRequest(actionContext);
else
actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Forbidden);
}
}
  • OAuthAuthorizationServerProvider 类:

public class MyOAuthProvider : OAuthAuthorizationServerProvider
{
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
}

public override async Task GrantResourceOwnerCredentials(
OAuthGrantResourceOwnerCredentialsContext context)
{
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
string username = context.UserName;
string password = context.Password;
if (Membership.ValidateUser(username, password))
{
using (var ee = new DBEntities())
{
MembershipUser mu = Membership.GetUser(username);
Guid guid = (Guid)mu.ProviderUserKey;
string roles = string.Join(",", Roles.GetRolesForUser(username));
identity.AddClaim(new Claim(ClaimTypes.Role, roles));
identity.AddClaim(new Claim("username", username));
context.Validated(identity);
}
}
else
{
context.SetError("Login Field", "Error username or password");
}
}
}

最佳答案

我在以下位置找到了解决方案:这个 post
问题出在这一行

identity.AddClaim(new Claim("username", username));

我将“用户名”更改为 ClaimTypes.Name

identity.AddClaim(new Claim(ClaimTypes.Name, username));

关于c# - 不记名 token 不适用于我的 WebAPI 授权属性角色,用户名为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44345574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com