webapi和winform客户端的auth0角色身份验证

时间:2017-02-16 05:49:19

标签: c# winforms asp.net-web-api auth0

我正在尝试使用auth0 winformserverauthorization extension从winform客户端到web api服务设置角色身份验证。

从winform中,我可以进行身份​​验证并获取access_token及其角色(admin)

    var auth0 = new Auth0Client(
                  "xxx.au.auth0.com",
                  "1Zf2W81KYrbHJ8MjPYd...");
    var user = auth0.LoginAsync(this);
    access_token = user.Result.IdToken

在调用webapi时传递令牌,它可以通过[Authorize]但不能[Authorize(Roles=admin)]

var client = new RestClient("http://localhost:61758/api/values");
            var request = new RestRequest(Method.GET);
            request.AddHeader("Authorization", string.Format("Bearer " + access_token));

查看函数JsonWebToken.cs\ValidateToken,我发现payloadData只有几个值,但根本没有roles

{"iss":"https://xxx.au.auth0.com/","sub":"auth0|57e37cc190da2a82c5d6","aud":"2W81KYrbHJ8MjPYd2WVyVrH3","exp":1487259046,"iat":1487223046}

知道为什么角色从令牌中消失了吗?

1 个答案:

答案 0 :(得分:1)

解决。问题是范围(https://auth0.com/docs/scopes)。

默认范围为openid,令牌仅包括iss,sub,aud,exp和iat声明。我们需要设置scope = openid roles以便将角色嵌入。

var user = auth0.LoginAsync(this, "", "openid roles");