2017-02-09 120 views
1

我是基于令牌的身份验证的新手。参考以下链接,我试图了解基于令牌的身份验证。如何将授权令牌传递给GET方法以访问授权资源?

如果用户凭据有效,我得到所需的令牌。

[AcceptVerbs("POST")] 
    [HttpPost] 
    public string Post([FromBody]User user) 
    { 
     if(user.Username == "hello" && user.Password == "123") 
     { 
      var accessTokenResponse = GenerateLocalAccessTokenResponse(user.Username); 

      return accessTokenResponse.ToString(); 
     } 
     else 
     { 
      return "User invalid"; 
     } 
    } 

生成的令牌

TWC1Q2rrenZC2p78KPnS4JblcepCg6q3XuxqBQIh7L003npbb6hlBAOYGRN03OvY_O55GWFkZp7UfCmhCgH9Z4rBsjvIrp8gyCp4HmxpP4axVKk10NM9fiG2ctgZWeSbw1jNOor42Wk3yMufbs4xP0RlNuvdpLtBLir52g9rPF053kiJtYryNGzPsbibXHRrNoy0wOR2384uLAJ5pNE9s1DwYpdPKB9uOLSAGhDQOVU,

现在,当我试图访问受保护的资源

[Authorize] 
    [HttpGet] 
    // GET api/orders/5 
    public string Get() 
    { 
     return "This is a secure resource"; 
    } 

我得到“拒绝访问错误”。

如何使用令牌访问此类资源。

任何帮助/建议高度赞赏。 谢谢。

+0

也许这个答案可能会给你更多的见解:http://stackoverflow.com/questions/38661090/token-based-authentication-in-web-api-without-any-user-interface/38670221#38670221 –

+0

是它现在工作? – jps

+0

@jps。是的..真诚的感谢 –

回答

2

通常情况下,您不会在控制器中实现令牌端点作为POST方法,而是为其创建一个单独的类(SimpleAuthorizationServerProvide),如上述教程中所示。 如果一切设置正确,你必须Authorization头添加到您的http请求

Authorization: Bearer TWC1Q2rrenZC2p78KP... 

,并获得与状态代码200(OK)

要获得令牌发送的请求的回复(例如与工具fiddler)到您的令牌端点 例如如果您的服务是在端口52180本地主机上运行,​​它看起来像这样:

POST http://localhost:52180/token 

grant_type=password&username=admin&password=123&client_id=abc 

的grant_type部分请求主体。 当您发布上述请求时,您将到达令牌端点。就像Taiseer在本教程的第12步中所写的那样。

当您在发送上述请求时应立即到达的断点GrantResourceOwnerCredentials

通常的流程是: - 客户端请求令牌从http://localhost:52180/token

  • 服务器认证在GrantResourceOwnerCredentials用户凭据,并发出令牌

  • 客户端从令牌响应读取的access_token

  • 客户端向请求添加包含access_token的授权标头

    http://localhost:52180/api/orders 
    
    Authorization: Bearer TWC1Q2rrenZC2p78KP... 
    
  • 服务器读取授权报头和授予访问权限(如果令牌是有效的)

  • 服务器进程请求,例如,GET请求

  • 客户端接收状态200和期望的数据

上面显示的api控制器看起来不错 [Authorize]属性是您控制器中所需的全部。它向http请求管道添加了一个AuthorizationFilter,当客户端将上面提到的授权标头添加到请求中时,它处理授权。

+0

同意。但是,如何添加授权令牌以获取订单。请建议 –

+0

这是TokenEnd()https://codepaste.net/nirv5q –

+0

我交叉检查一切似乎匹配。 –