使用AngularJs,WebAPI和OAuth2时,可以使用JWT以明文形式获取用户角色

时间:2015-03-26 04:51:42

标签: angularjs asp.net-web-api oauth owin jwt

我在WebAPI项目中唱OAuth2。我在OWIN中间件中验证用户请求。在成功身份验证时,我正在向客户端发送JWT访问令牌。现在我可以在服务器上验证后续请求并使用Api控制器上的[Authorize(Roles =" myRole")]属性。

但是如何在AngularJs中显示验证客户端内容并根据用户角色显示页面?我在客户端有JWT,不知道如何从中获取用户角色?

从JWT中提取信息是一种好方法吗?

2 个答案:

答案 0 :(得分:3)

您需要解析该JWT并获取值。你可以在angular-jtw库的帮助下做到这一点。

1)下载angular-jwt.min.js(https://github.com/auth0/angular-jwt

2)放置" angular-jwt"在应用程序模块上:

var app = angular.module("YOUR_APP", ["angular-jwt"]);

3)将jwtHelper传递给您的服务或控制器,或者您希望使用它的任何地方。

    app.module.factory("YOUR_SERVICE", function(jwtHelper){
    ...
});

4)使用你传入的jwtHelper的decodeToken方法解码你的令牌

例如,下面的代码是从我的服务端点返回的jwt中解析出角色对象。从服务器返回后,角色将从jwt中提取并返回。

return $http.post(serviceEndPoints.tokenUrl, data, config)
                    .then(function (response) {
                        var tokenPayLoad = jwtHelper.decodeToken(response.data.access_token);

//Now do whatever you wish with the value. Below I am passing it to a function: (determineRole)

                        var userRole = determineRoles(tokenPayLoad.role);


            return userRole;
        });
    };

希望有所帮助

//霍迪尼

答案 1 :(得分:1)

目前,我们不提供任何可以帮助您在客户端上利用该信息的内容。另请注意:由于今天我们不验证客户端上的令牌,我们无法真正信任其内容......而服务器端的[Authorize]属性只有在管道才有可能验证之前获取角色信息签名并确定令牌有效。 我们可能会在将来介绍一些有助于此方案的内容,但目前您需要编写自定义代码或依赖服务器端来回应问题。