首页 文章

如何将授权令牌传递给GET方法来访问授权资源?

提问于
浏览
1

我是基于令牌的身份验证新手 . 参考下面的链接,我试图了解基于令牌的身份验证 .

如果用户凭据有效,我将获得所需的令牌 .

[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";
    }

我得到“访问被拒绝错误” .

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

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

1 回答

  • 2

    通常你不会在你的控制器中将令牌 endpoints 实现为POST方法,而是为它创建一个单独的类( SimpleAuthorizationServerProvide ),如上面提到的教程中所示 . 如果一切设置正确,则必须向http请求添加Authorization标头

    Authorization: Bearer TWC1Q2rrenZC2p78KP...
    

    并获得状态代码为200的回复(确定)

    要获取令牌,请向您的令牌 endpoints 发送请求(例如使用工具fiddler),例如如果您的服务在端口52180上的localhost上运行,它看起来像这样:

    POST http://localhost:52180/token 
    
    grant_type=password&username=admin&password=123&client_id=abc
    

    grant_type部分是请求主体 . 当您发布上述请求时,您将到达令牌 endpoints . 正如Taiseer在本教程的第12步中所写的那样 .

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

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

    • server在GrantResourceOwnerCredentials中验证用户凭据并颁发令牌

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

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

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

    • 服务器处理请求,例如GET请求

    • 客户端接收状态200和所需数据

    上面显示的api控制器看起来没问题[Authorize]属性就是控制器所需要的 . 这会向http请求管道添加一个AuthorizationFilter,当客户端将上述Authoriztion头添加到请求时,它会为您处理授权 .

相关问题