登录到我的Azure网站时“使用租户特定终结点或将应用程序配置为多租户”

m4pnthwp  于 2022-12-19  发布在  其他
关注(0)|答案(8)|浏览(182)

我在登录Azure网站后收到此错误:
AADSTS50194:应用程序“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx”未配置为多租户应用程序。对于在“10/15/2018”之后创建的此类应用程序,不支持使用/common终结点。请使用特定于租户的终结点或将应用程序配置为多租户。

cwdobuhd

cwdobuhd1#

如果您是收到此消息的Azure管理员,则可能是由于错误消息中列出的确切原因-您无法使用common API端点来MSFT登录租户特定的应用程序。
在我的例子中,我使用示例代码配置了一个应用注册-示例代码需要使用一个新端点进行修改,即以下行:
let kAuthority = "https://login.microsoftonline.com/common"
需要更改为:
let kAuthority = "https://login.microsoftonline.com/MY_TENANT_NAME"
可以通过在Azure搜索栏中键入“租户状态”来获取Azure组织的租户名称。

** xamarin **:上面的注解适用于MSAL iOS -对于Xamarin MSAL Android/iOS,没有直接的方法在主调用中设置权限,它需要链接到交互式登录调用。

例如,下面的示例代码:

authResult = await App.PCA.AcquireTokenInteractive(App.Scopes)
                      .WithParentActivityOrWindow(App.ParentWindow)
                      .ExecuteAsync();

需要更改为:

authResult = await App.PCA.AcquireTokenInteractive(App.Scopes)
                      .WithAuthority("https://login.microsoftonline.com/YOUR_TENANT_NAME")
                      .WithParentActivityOrWindow(App.ParentWindow)
                      .ExecuteAsync();
u1ehiz5o

u1ehiz5o2#

It turns out that my account was not actually on Azure AD, so I needed to check "Accounts in any organizational directory" under "Supported account types" on portal.azure.com
Specifically: portal.azure.com > Azure Active Directory > App registrations (preview) > Your App > Authentication > Supported account types > Accounts in any organizational directory

wlwcrazw

wlwcrazw3#

由于某些原因,YOUR_TENANT_NAME似乎对我不起作用。它对其他人起作用了,所以你还是应该试试。
代替上面的解决方案,下面的工作对我来说:

authority: "https://login.microsoftonline.com/Your_Tenant_ID"

您可以通过在Azure搜索栏中键入Tenant Properties来查找Your_Tenant_ID

von4xj4u

von4xj4u4#

更进一步到@Coruscate5的帖子,这对我有帮助,你可以为iOS设置WithAuthority,如下所示。

var builder = PublicClientApplicationBuilder.Create(OAuthSettings.ApplicationId)**.WithAuthority("https://login.microsoftonline.com/YOUR_TENANT_NAME");**

如果您遵循Build Xamarin apps with Microsoft Graph指南,并且没有对多租户应用程序进行身份验证,那么这一点非常重要。
以下是获取租户名称的方法:

https://learn.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id
ia2d9nvy

ia2d9nvy5#

here所述,如果您使用的是带有Microsoft.AspNetCore.Authentication.MicrosoftAccount的应用,Microsoft帐户OAuth提供程序的默认设置将使用一个公共端点:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize

假设这是一个 * 多租户 * 应用程序,并具有“任何组织目录中的帐户”权限级别。
如果您需要单租户应用,则必须在Startup.cs中指定授权和令牌端点:

services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
    microsoftOptions.AuthorizationEndpoint = "https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/authorize";
    microsoftOptions.TokenEndpoint = "https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/token";
    microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
    microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
});

终结点的URL可在Azure上 * 应用注册 * 概述页面的 * 终结点 * 选项卡中找到,OAuth 2.0授权终结点和令牌终结点的URL中已包含您的租户ID。
Documentation on the MicrosoftAccountOptions .

njthzxwz

njthzxwz6#

我在这里偶然发现了同样的错误,但是使用了python来验证我的API调用。
具体来说,我使用的是bingads中的authOAuthDesktopMobileAuthCodeGrant类。
authOAuthDesktopMobileAuthCodeGrant的init显示以下内容,请注意,租户属性默认为“common”。

def __init__(self, client_id, oauth_tokens=None, env=PRODUCTION, oauth_scope=MSADS_MANAGE, tenant='common'):

因此,为了不像上面强调的那样默认为/common,我不得不在这里将这个租户组件设置为我的应用的租户ID

authentication = OAuthDesktopMobileAuthCodeGrant(
        client_id=client_id,
        tenant="{YOUR_TENANT_ID}",
        env='production'

希望这对其他使用Python的人有用。

aiqt4smr

aiqt4smr7#

在我的例子中,在教程的msal_config. json中添加tenant_id确实有效:

"authorities" : [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount",
        **"tenant_id": "YOUR_TENANT_ID"**
      },
      "default": true
    }
  ]
nimxete2

nimxete28#

authority字段添加到客户端的身份验证配置中。
authority字段需要设置为:

https://login.microsoftonline.com/<tenant id>
  • 💡将<tenant id>替换为您的租户ID;例如:

https://login.microsoftonline.com/f1c6ef1a-4230-4db1-a5e7-67c20e92d0d6

  • 💡要获取"租户ID",请在Azure管理门户搜索中键入 "租户属性"

Javascript示例

对于Javascript应用,有@azure/msal-browser官方包。注意,您需要在config.auth对象中提供authority字段,如下所示:

import * as msal from '@azure/msal-browser';

// ...

let config = {
    auth: {
      clientId: "<application id>", 
      authority: "https://login.microsoftonline.com/<tenant id>",
    },
};

let publicClientApplication = new msal.PublicClientApplication(config);

// ...

PS-其余的代码请查看this MSDN tutorial,它显示了如何登录到单页面应用程序的代码

相关问题