我创建了一个API,试图通过AAD保护它。 它已经适用于我组织的帐户和其他组织的帐户,但不适用于个人Microsoft帐户。
我已经尝试了不同的端点,但是如果我希望任何帐户都可以登录,则我认为公用端点应该是正确的端点。
这是我的API启动外观:
services.AddAuthentication(o =>
{
o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(o =>
{
o.Authority = "https://login.microsoftonline.com/common";
o.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
// Both App ID URI and client id are valid audiences in the access token
ValidAudiences = new List<string>
{
"APP ID",
},
ValidateIssuer = false,
};
});
这就是我通过javascript获取访问令牌的方式:
var applicationConfig = { //Cloudlist API via TestApp
clientID: "APP ID",
authority: "https://login.microsoftonline.com/common",
graphScopes: ["https://hsde.onmicrosoft.com/APP ID/User"]
};
var myMSALObj = new Msal.UserAgentApplication(applicationConfig.clientID,
applicationConfig.authority, null, { storeAuthStateInCookie: true,
cacheLocation: "localStorage" });
myMSALObj.loginPopup(applicationConfig.graphScopes).then(function (idToken) {
myMSALObj.acquireTokenSilent(applicationConfig.graphScopes).then(function (accessToken) {
callAPI(accessToken);;
});
}, function (error) {
console.log(error);
});
当我使用个人Microsoft帐户登录并使用accessToken调用API时,出现401未经授权错误。 响应头说: www-authenticate:Bearer error =“ invalid_token”,error_description =“未找到签名密钥”
使用个人Microsoft帐户登录时,我需要做些其他改变吗?
答案 0 :(得分:0)
首先,获取令牌并尝试在jwt.io中进行解码,只是为了检查受众群体ID是否与您在网络api中使用的ID相同。