Web api如何使用从api发送的令牌

时间:2017-08-13 11:18:36

标签: c# asp.net-web-api asp.net-ajax

已经挖了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

4 个答案:

答案 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;
      }

}