我有一个配置了OAuth的Asp.net web api。现在我有新的客户端不能使用Oauth但想要使用相同端点URL的基本身份验证。
还没有找到任何方法来做到这一点。对此有任何帮助表示赞赏。在此先感谢
答案 0 :(得分:1)
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext actionContext)
{
if ((Thread.CurrentPrincipal.Identity.Name?.Length ?? 0) <= 0)
{
AuthenticationHeaderValue auth = actionContext.Request.Headers.Authorization;
if (string.Compare(auth.Scheme, "Basic", StringComparison.OrdinalIgnoreCase) == 0)
{
string credentials = UTF8Encoding.UTF8.GetString(Convert.FromBase64String(auth.Parameter));
int separatorIndex = credentials.IndexOf(':');
if (separatorIndex >= 0)
{
string userName = credentials.Substring(0, separatorIndex);
string password = credentials.Substring(separatorIndex + 1);
var userManager = new MembershipUserManager();
var user = userManager.FindAsync(userName, password).Result;
if (user != null)
Thread.CurrentPrincipal = actionContext.ControllerContext.RequestContext.Principal = new GenericPrincipal(new GenericIdentity(userName, "Basic"), System.Web.Security.Roles.Provider.GetRolesForUser(userName));
}
}
}
return base.IsAuthorized(actionContext);
}
}
一旦设置了令牌auth(Oauth),就可以使用此代码,这对两种方法都适用:此属性应在所有地方使用(放弃Authorize)[包含角色],并验证基本auth,而验证基本auth。 IsAuthorized(actionContext);将验证令牌方法(Oauth)。
MembershipUserManager是我创建的自定义类,以使其与Membership一起使用,我猜您将使用Identity User Manager。