我尝试使用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调试器仍然显示无效的签名
答案 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('/');
}]);