在控制器操作

时间:2016-10-02 16:47:08

标签: asp.net-web-api2 jwt

我正在使用Angular2 SPA为我的ASP.NET Web API应用程序实现基于JWT的授权。除了一个细节之外,所有关于授权流程的都很清楚。我想知道如何在Web API控制器操作中获取JWT有效负载信息?

通过网络浏览,我无法找到我想要的任何解决方案,例如设置Thread.Principal或类似的内容。

推荐的方法是什么?

1 个答案:

答案 0 :(得分:3)

在ASP.NET中处理JWT令牌作为身份验证的正常过程是:

  1. 从请求中获取令牌并确保有效。
  2. 根据令牌中包含的信息创建一个主体,并将其与请求相关联。
  3. 这意味着令牌中的有效负载信息通过请求主体通常以声明的形式提供。例如,如果您的JWT包含有关用户角色的信息,那么它将映射到主体中可用的角色声明。

    你没有提到你是否正在使用OWIN,所以我会假设OWIN为例子,但它在控制器级别上并不重要或者有很大不同。

    尽管您只关注数据消费部分,但如果您感到好奇,可以通读这组有关ASP.NET Web API(OWIN)的教程,以便更深入地了解整个过程: / p>

    最后一个是最感兴趣的,您会在该注释中注明以下代码段:

    [HttpGet]
    [Authorize]
    [Route("claims")]
    public object Claims()
    {
        var claimsIdentity = User.Identity as ClaimsIdentity;
    
        return claimsIdentity.Claims.Select(c =>
            new
            {
                Type = c.Type,
                Value = c.Value
            });
    }
    

    这取决于控制器中可用的User.Identity列出当前已验证身份的所有声明。除非您的身份验证管道配置相当不同,否则这些声明是从您接收的JWT有效负载映射的。