如何让Azure轻松验证JWT access_token

时间:2017-02-28 20:07:14

标签: azure azure-web-sites

我有一个Azure应用服务,我在其上启用了身份验证/授权,并将AD配置为身份验证提供程序。

服务上存在所有<script type="text/javascript"> alert('Onload'); var ownerEmail = window.localStorage.getItem("Email"); // alert(ownerEmail); var actCode = window.localStorage.getItem("ActivationCode"); document.getElementById("mem").value = ownerEmail; document.getElementById("mac").value = actCode; document.getElementById("mkn").value = "ownerMaster"; document.getElementById("mki").value = "27"; function submitForm() { $.ajax({ type:'POST', url: 'http://dev.mywaggintales.com/pets/media2s3.php', data:$('#the-form').serialize(), success: function(response) { var resultObject = JSON.parse(response); if (resultObject.wtSuccess) { alert('Success'); // If Successful Store var addressID = resultObject.wtSuccess[1].wtPayload.wtAddressID; } else { alert('Failed'); // Code Change and Parse the JASOn Object and show it in UI } }}); } </script> 路由,我可以登录。成功登录后,我可以致电/.auth获取/.auth/me。回复如下:

access_token

然后我在授权承载头中使用[ { "access_token": "AQABAAAAAA...Gni4EiQgAA", "expires_on": "2017-02-28T19:17:08.0000000Z", "id_token": JWT TOKEN ... } ] 来请求来自服务的数据。

access_token

我的服务返回以下错误

"Authorization": "Bearer " + "AQABAAAAAA...Gni4EiQgAA"

根据this discussionIDX10708: 'System.IdentityModel.Tokens.JwtSecurityTokenHandler' cannot read this string: 'AQABAAAAAA...Gni4EiQgAA'. The string needs to be in compact JSON format, which is of the form: '<Base64UrlEncodedHeader>.<Base64UrlEndcodedPayload>.<OPTIONAL, Base64UrlEncodedSignature>'. 旨在用作承载令牌。我还读过here access_token应该是base64编码的,但似乎并非如此。

此外,如果我使用access_token作为承载令牌,则身份验证按预期工作(id_token采用JWT格式)。

修改

当我按照here所述手动实现Oauth流时,我会收到一个正确的JWT id_token

access_token

其次是

GET
https://login.microsoftonline.com/common/oauth2/authorize?client_id=client_id&response_type=code&redirect_uri=redirect_uri

1 个答案:

答案 0 :(得分:4)

  

如何让Azure轻松验证JWT access_token

根据您的描述,我启用了身份验证/授权,并将AD配置为身份验证提供程序以测试此问题。众所周知,当您在Azure门户上启用身份验证/授权时,默认response_typeid_token。您需要登录https://manage.windowsazure.com并更新App Service Auth Configuration,如下所示:

enter image description here

注意:如果您没有为resource指定additionalLoginParams,则会检索不是JSON Web令牌(JWT)格式的access_token。

  

然后我使用授权承载头中的access_token来请求来自服务的数据。

要访问您的服务,您可以使用AppServiceAuthSession Cookie,也可以使用Authorization:Bearer "{your-id-token}"

有关详情,请参阅此类tutorial