Auth0授权抛出未授权

时间:2016-08-11 09:58:07

标签: angularjs jwt auth0

我尝试使用angular。在我的单页面应用程序中实现Auth0。

这是我为auth0加载的脚本:

   authProvider.on('loginSuccess', ['$location', 'profilePromise', 'idToken', 'store',
          function($location, profilePromise, idToken, store) {

            profilePromise.then(function(profile) {
              store.set('user', profile.email);
              store.set('token', idToken);
            });

            $location.path('/');
        }]);

但令牌的签名无效,并且在我尝试api调用此处的用户信息时始终未经授权:Api to get user data

令牌存储在以下eventhandler

中的本地存储中
Public Class EmailService
    Implements IIdentityMessageService

    Public Function SendAsync(message As IdentityMessage) As Task Implements IIdentityMessageService.SendAsync
        Dim sg = New SendGridAPIClient(ConfigurationManager.AppSettings("SendGridApiKey"))

        Dim from = New Email("support@investorsedge.net", "InvestorsEdge")
        Dim [to] = New Email(message.Destination)
        Dim Content = New Content("text/html", message.Body)
        Dim Mail = New Mail(from, message.Subject, [to], Content)

        Dim response = sg.client.mail.send.post(requestBody:=Mail.Get()).GetAwaiter().GetResult()
        If Not response.StatusCode = Net.HttpStatusCode.Accepted Then
            AtlasDb.Log.ErrorFormat("EmailService.SendAsync", "Abnormal response code ({0}", response.StatusCode)
        End If

        Return Task.FromResult(response.StatusCode)
    End Function
End Class

当我尝试使用我的客户机密码解码我的jwt时,来自jwt.io的调试器总是说无效的签名。

我做错了什么吗?为什么我的令牌签名无效?为什么我的令牌未经授权? Api页面是否适用于实际数据?

编辑:

我发现我使用了错误的api调用,而是使用了auth0-access-tokens而不是JWT。

但JWT调试器仍然显示无效的签名

1 个答案:

答案 0 :(得分:0)

如果您使用idToken,则应拨打/tokeninfo endpoint。请务必遵循所需格式:它应为POST,内容类型json包含此有效内容:

{
  "id_token" : "[the token]"
}

但是,您可能不想做任何此类事情。对/tokeninfo的调用将为您提供用户配置文件,但SDK在验证用户身份后已经为您执行此操作。来自profilePromise的回调中提供了相同的用户个人资料:

authProvider.on('loginSuccess', ['$location', 'profilePromise', 'idToken', 'store',
      function($location, profilePromise, idToken, store) {

        profilePromise.then(function(profile) {
          // 'profile' contains the same information that 
          // you would get calling '/tokeinfo' or '/userinfo' 
          // so consider storing the whole 'profile' instead
          // of just 'profile.email'
          store.set('user', profile.email);
          store.set('token', idToken);
        });

        $location.path('/');
    }]);