我有一个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 discussion,IDX10708: '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
答案 0 :(得分:4)
如何让Azure轻松验证JWT access_token
根据您的描述,我启用了身份验证/授权,并将AD配置为身份验证提供程序以测试此问题。众所周知,当您在Azure门户上启用身份验证/授权时,默认response_type
为id_token
。您需要登录https://manage.windowsazure.com并更新App Service Auth Configuration,如下所示:
注意:如果您没有为resource
指定additionalLoginParams
,则会检索不是JSON Web令牌(JWT)格式的access_token。
然后我使用授权承载头中的access_token来请求来自服务的数据。
要访问您的服务,您可以使用AppServiceAuthSession
Cookie,也可以使用Authorization:Bearer "{your-id-token}"
。
有关详情,请参阅此类tutorial。