已经挖了3天了,仍然无法找到一个好的答案。真的很感激,如果有人可以帮助我 例如 。客户使用www.client.com的登录功能 我的web api已成功验证并向用户发送令牌。客户端如何使用api返回的令牌来访问带有
的方法 [RoutePrefix("api/Customer")]
public class CustomerController : ApiController
{
List<customer> list = new List<customer>() { new customer {id=1 ,customerName="Marry",age=13},
new customer { id = 2, customerName = "John", age = 24 } };
[Route("GetExployeeByID/{id:long}")]
[HttpGet]
[Authorize]
public customer GetExployeeByID(long id)
{
return list.FirstOrDefault(x => x.id == id);
}
}
客户端脚本
function login() {
$.ajax({
url: 'http://www.azapi.com:81/token',
contenttype: 'application/json',
data: { username: 'admin@admin.com', password: 'P@ssw0rd', grant_type: 'password' },
type: 'post',
crossDomain: true,
success: function (data) {
sessionStorage.setItem('token', data.access_token)
},
error: function (err) {
debugger
alert('error')
}
})
}
function getEmployee() {
$.ajax({
url: 'http://www.azapi.com:81/api/customer/GetExployeeByID/1',
datatype: "json",
type: 'get',
headers: {
"access_token": sessionStorage.getItem("token")
},
crossDomain: true,
success: function (data) {
debugger
alert(data.customerName)
},
error: function (err) {
debugger
alert('error')
}
})
}
属性方法。客户端从跨域调用Ajax中的方法,我的webapi已经在web.config
中打开webapi config和cros策略中的cros答案 0 :(得分:0)
当他们发送请求时,他们应该添加一个名为&#34; Authorization&#34;使用令牌的值。
然后,当请求到来时,您可以将其从标头中取出并处理身份验证控制
答案 1 :(得分:0)
您应该像这样编写自定义AuthorizationAttribute
:
public class CheckAttendeeNameAttribute : System.Web.DomainServices.AuthorizationAttribute
{
public override bool Authorize(System.Security.Principal.IPrincipal principal)
{
if (principal.IsInRole("Attendee") && principal.Identity.Name.StartsWith("A"))
{
return true;
}
else
{
return false;
}
}
}
答案 2 :(得分:0)
用户通过身份验证后,可以在请求标头中发送令牌,您可以在time = datestr(719529+time/86400,'dd/mmm/yyyy HH:MM:SS');
中检查请求标头,过滤类似下面的代码:
Authorize
答案 3 :(得分:0)
尝试此操作:将其用作Controller方法的过滤器
public class AuthorizationFilter : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext actionContext)
{
var isAuthenticated = base.IsAuthorized(actionContext);
if (isAuthenticated)
{
var headers = actionContext.Request.Headers;
IEnumerable<string> header;
headers.TryGetValues("AuthorizationHeaderName", out header);
var token = header.GetEnumerator().Current;
//validate your token
if (tokenVerification(token))
{
return true;
}
return false;
}
}
private bool tokenVerification (string token)
{
if // valid token
return true;
else return false;
}
}