我通过“应用程序注册(预览)”在我的Active Directory上创建了一个应用程序,并使用Microsoft身份验证库(MSAL.js)登录该应用程序。该应用程序将使用'user_impersonation'范围进行API调用,因此我已在应用中启用了该调用。
我还希望未添加到租户的用户能够登录并使用该应用程序,因此我将'signInAudence'设置为'AzureADandPersonalMicrosoftAccount'。如果我理解正确,这应该允许任何帐户,无论其是否是其成员的登录。
但是,当我使用不是应用程序租户中的用户的帐户向应用程序发出登录请求时,我收到错误消息:“租户”MyTenant中不存在所选用户帐户,并且无法访问应用程序“MyApplicationID”在那个房客里。该帐户需要首先作为外部用户添加到租户中。请使用其他帐户。
我正在使用以下JavaScript来拨打电话:
var applicationConfig = {
clientID: "MYCLIENTID",
authority: "https://login.microsoftonline.com/MYTENANTID",
graphScopes: ["https://management.azure.com/user_impersonation"],
graphEndpoint: "https://graph.microsoft.com/v1.0/me"
};
var headers = new Headers();
var userAgentApplication = new Msal.UserAgentApplication(applicationConfig.clientID, applicationConfig.authority, tokenReceivedCallback);
function clicked(){
console.log('clicked');
userAgentApplication.loginPopup(applicationConfig.graphScopes).then(function (idToken) {
userAgentApplication.acquireTokenSilent(applicationConfig.graphScopes).then(function (accessToken) {
var bearer = "Bearer " + accessToken;
headers.append("Authorization", bearer);
var options = {
method: "GET",
headers: headers
};
var endpoint = "https://management.azure.com/subscriptions?api-version=2016-06-01";
fetch(endpoint, options).then(function (response) {
var body = response.body;
});
}, function (error) {
});
}, function (error) {
//login failure
});
}
有什么我想让这个工作或我误解'AzureADandPersonalMicrosoftAccount'设置吗?
您已将权限指定为:https://login.microsoftonline.com/MYTENANTID
。
您需要将其指定为https://login.microsoftonline.com/organizations/v2.0
,这允许任何帐户登录。
这允许来自任何Azure AD租户的用户登录。请注意,由于您要访问Azure API,因此我们无法使用通用。
如果您指定租户ID,则只有该租户的用户才能登录。
如果要允许不同租户中的用户登录您的应用程序,则必须在Azure AD中注册多租户应用程序。有关详细信息,请参阅document。同时,您需要将您的权限指定为https://login.microsoftonline.com/common/v2.0
。