如何将授权令牌传递给 GET 方法以访问授权资源?
How to pass authorization token to GET method to access authorized resource?
我是基于令牌的身份验证的新手。参考以下链接,我试图了解基于令牌的身份验证。
如果用户凭据有效,我将获得所需的令牌。
[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";
}
我得到 "Access Denied Error"。
如何使用令牌访问此类资源。
任何 help/suggestion 高度赞赏。
谢谢
通常您不会在控制器中将令牌端点实现为 POST 方法,而是为它创建一个单独的 class (SimpleAuthorizationServerProvide
),如上述教程所示.
如果一切设置正确,您必须向您的 http 请求
添加授权 header
Authorization: Bearer TWC1Q2rrenZC2p78KP...
并得到状态码为 200(OK)的回复
要获取令牌,请向您的令牌端点发送请求(例如使用工具 fiddler)
例如如果您的服务是 运行 在端口 52180 上的本地主机上,它看起来像这样:
POST http://localhost:52180/token
grant_type=password&username=admin&password=123&client_id=abc
grant_type 部分是请求 body。
当您 post 上述请求时,您将到达令牌端点。正如 Taiseer 在教程的第 12 步中所写的那样。
当您在 GrantResourceOwnerCredentials
处设置断点时,您发送上述请求后应该会到达该断点。
通常的流程是:
- 客户端从 http://localhost:52180/token
请求令牌
服务器验证 GrantResourceOwnerCredentials 中的用户凭据并颁发令牌
客户端从令牌响应中读取access_token
客户端向请求
添加包含access_token的授权header
http://localhost:52180/api/orders
Authorization: Bearer TWC1Q2rrenZC2p78KP...
服务器读取授权 header 并授予访问权限(如果令牌有效)
服务器处理请求,例如GET请求
客户端收到状态 200 和所需数据
上面显示的 api 控制器看起来不错
[Authorize] 属性是您在控制器中所需要的全部。这会向 http 请求管道添加一个 AuthorizationFilter,当客户端将上述 Authoriztion header 添加到请求时,它会为您处理授权。
我是基于令牌的身份验证的新手。参考以下链接,我试图了解基于令牌的身份验证。
如果用户凭据有效,我将获得所需的令牌。
[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";
}
我得到 "Access Denied Error"。
如何使用令牌访问此类资源。
任何 help/suggestion 高度赞赏。 谢谢
通常您不会在控制器中将令牌端点实现为 POST 方法,而是为它创建一个单独的 class (SimpleAuthorizationServerProvide
),如上述教程所示.
如果一切设置正确,您必须向您的 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 部分是请求 body。 当您 post 上述请求时,您将到达令牌端点。正如 Taiseer 在教程的第 12 步中所写的那样。
当您在 GrantResourceOwnerCredentials
处设置断点时,您发送上述请求后应该会到达该断点。
通常的流程是: - 客户端从 http://localhost:52180/token
请求令牌服务器验证 GrantResourceOwnerCredentials 中的用户凭据并颁发令牌
客户端从令牌响应中读取access_token
客户端向请求
添加包含access_token的授权headerhttp://localhost:52180/api/orders Authorization: Bearer TWC1Q2rrenZC2p78KP...
服务器读取授权 header 并授予访问权限(如果令牌有效)
服务器处理请求,例如GET请求
客户端收到状态 200 和所需数据
上面显示的 api 控制器看起来不错 [Authorize] 属性是您在控制器中所需要的全部。这会向 http 请求管道添加一个 AuthorizationFilter,当客户端将上述 Authoriztion header 添加到请求时,它会为您处理授权。