问题描述
我正在尝试将webapi和客户端作为拖车进行身份验证 单独的项目启用了cors的单独项目。我有两个 问题,无法从主体对象获取角色,另一方面,如果在webapi用户验证方法信息中包含注释代码(responseMessage.Content = new StringContent(GetRole( )); 返回responseMessage;)。这是代码
```
$("#btnSubmit").click(function () {
$.ajax({
type: 'GET',url: 'http://localhost/TestApi/uservalidation',dataType: 'json',cache: false,beforeSend: function (request) {
request.setRequestHeader("Authorization","Basic " +
btoa($('#txtUsername').val() + ':' +
$('#txtPassword').val()));
},success: function (data,textStatus,xhr) {
debugger;
console.log(data);
},error: function (er) {
debugger;
},complete: function (jqXHR) {
debugger;
if (jqXHR.status === "401") {
alert("UnAuthorized");
}
}
});
});
WebApi Code
[BasicAuthentication]
[HttpGet]
[Route("UserValidation")]
public HttpResponseMessage ValidateUser()
{
try
{
HttpResponseMessage responseMessage =
Request.CreateResponse(HttpStatusCode.OK,Thread.CurrentPrincipal.Identity.Name);
// responseMessage.Content = new StringContent(GetRole());
return responseMessage;
// return Request.CreateResponse(HttpStatusCode.OK,"authenticated");
}
catch (System.Exception ex)
{
return
Request.CreateErrorResponse(HttpStatusCode.InternalServerError,"Error
occured
while executing GetEmployee");
// throw ex;
}
//HttpResponseMessage responseMessage =
Request.CreateResponse(HttpStatusCode.OK,Thread.CurrentPrincipal.Identity.Name);
//responseMessage.Content = new StringContent(GetRole(),Encoding.Unicode);
//return responseMessage;
}
Code for basic authentication
public override void OnAuthorization(HttpActionContext
actionContext)
{
string authenticationToken = string.Empty;
string decodedAuthenticationToken = string.Empty;
string[] userNamePassword;
string[] roleName;
try
{
if (actionContext.Request.Headers.Authorization == null)
{
actionContext.Response =
actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
else
{
authenticationToken =
actionContext.Request.Headers.Authorization.Parameter;
decodedAuthenticationToken =
Encoding.UTF8.GetString(Convert.FromBase64String(authenticationToken));
userNamePassword = decodedAuthenticationToken.Split(':');
ValidateUser validateUser = new
ValidateUser(userNamePassword[0],userNamePassword[1]);
if (validateUser.IsUserExits(out string userRoleName))
{
roleName = new string[] { userRoleName };
Thread.CurrentPrincipal = new GenericPrincipal(
new GenericIdentity(userNamePassword[0]),roleName);
}
else
{
actionContext.Response =
actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
}
base.OnAuthorization(actionContext);
}
catch (Exception ex)
{
throw ex;
}
finally
{
authenticationToken = string.Empty;
decodedAuthenticationToken = string.Empty;
}
}
````
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)