如何使用来自不同租户的用户登录 Azure App?
How to log into Azure App with a user from a different tenant?
我通过“应用程序注册(预览)”在我的 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 租户的用户登录。
请注意,我们不能使用 common,因为您想访问 Azure API。
如果您指定租户 ID,则只有来自该租户的用户才能登录。
如果你想让不同租户中的用户登录你的应用程序,你必须在Azure AD中注册一个多租户应用程序。详情请参考document。同时,您需要指定权限为https://login.microsoftonline.com/common/v2.0
.
我通过“应用程序注册(预览)”在我的 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 租户的用户登录。 请注意,我们不能使用 common,因为您想访问 Azure API。
如果您指定租户 ID,则只有来自该租户的用户才能登录。
如果你想让不同租户中的用户登录你的应用程序,你必须在Azure AD中注册一个多租户应用程序。详情请参考document。同时,您需要指定权限为https://login.microsoftonline.com/common/v2.0
.