C# 在/公用或/使用者终结点上不支持应用程序。请使用/组织或特定于租户的终结点

C# 在/公用或/使用者终结点上不支持应用程序。请使用/组织或特定于租户的终结点,c#,azure-active-directory,microsoft-graph-api,C#,Azure Active Directory,Microsoft Graph Api,我知道还有一些关于这个主题的帖子,但我似乎找不到任何有用的信息来应用于我自己的应用程序。我正在构建一个使用Microsoft Graph API的.Net MVC Web应用程序。我跟踪了另一个项目(),但当我启动应用程序时,它会重定向到尝试使用Microsoft工作帐户登录的位置,并重定向回主页。但是,在输入Microsoft帐户凭据后,在被重定向回之前,我会看到一个错误: 下面是我的Startup.Auth.cs中的一部分,我认为这是导致问题的原因。如果有人能在这个话题上看到任何不对劲或有

我知道还有一些关于这个主题的帖子,但我似乎找不到任何有用的信息来应用于我自己的应用程序。我正在构建一个使用Microsoft Graph API的.Net MVC Web应用程序。我跟踪了另一个项目(),但当我启动应用程序时,它会重定向到尝试使用Microsoft工作帐户登录的位置,并重定向回主页。但是,在输入Microsoft帐户凭据后,在被重定向回之前,我会看到一个错误:

下面是我的
Startup.Auth.cs
中的一部分,我认为这是导致问题的原因。如果有人能在这个话题上看到任何不对劲或有见解的东西,我将不胜感激。我一直在努力尝试使用Open Id Connect登录此应用程序,以便能够使用Microsoft Graph API。谢谢

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions {

    // The `Authority` represents the v2.0 endpoint - https://login.microsoftonline.com/common/v2.0
    // The `Scope` describes the permissions that your app will need. See https://azure.microsoft.com/documentation/articles/active-directory-v2-scopes/                    
    ClientId = appId,

        * * Authority = String.Format(CultureInfo.InvariantCulture, aadInstance, "common", "/v2.0"), * *
        RedirectUri = redirectUri,
        Scope = scopes,
        PostLogoutRedirectUri = redirectUri,
        TokenValidationParameters = new TokenValidationParameters {
            ValidateIssuer = false,
        },
        Notifications = new OpenIdConnectAuthenticationNotifications {
            AuthorizationCodeReceived = async(context) => {
                    var code = context.Code;
                    string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
                    string graphScopes = nonAdminScopes;
                    string[] scopes = graphScopes.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    ConfidentialClientApplication cca = new ConfidentialClientApplication(appId, redirectUri,
                        new ClientCredential(appSecret),
                        new SessionTokenCache(signedInUserID, context.OwinContext.Environment["System.Web.HttpContextBase"] as HttpContextBase).GetMsalCacheInstance(), null);
                    AuthenticationResult result = await cca.AcquireTokenByAuthorizationCodeAsync(code, scopes);

                    // Check whether the login is from the MSA tenant. 
                    // The sample uses this attribute to disable UI buttons for unsupported operations when the user is logged in with an MSA account.
                    var currentTenantId = context.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
                    if (currentTenantId == "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") {
                        HttpContext.Current.Session.Add("AccountType", "msa");
                    }
                    // Set IsAdmin session variable to false, since the user hasn't consented to admin scopes yet.
                    HttpContext.Current.Session.Add("IsAdmin", false);
                },
                AuthenticationFailed = (context) => {
                    context.HandleResponse();
                    context.Response.Redirect("/Error?message=" + context.Exception.Message);
                    return Task.FromResult(0);
                }
        }
});

此错误通常是由于您的应用程序注册与您正在使用的身份验证库之间不兼容造成的

该示例中的代码使用Microsoft身份验证库(MSAL),该库使用,支持聚合身份验证(Azure AD帐户和Microsoft帐户)。为了让v2身份验证端点工作,您的应用程序注册必须来自

如果您在Azure portal()上注册应用程序,您将看到此错误。这是因为Azure门户使用Azure v1 OAuth模式注册应用程序


还有一种情况是门户可以创建v1注册。如果您登录到该门户,并看到多个应用分组以及多个“添加应用”按钮,则需要为聚合应用选择“添加应用”按钮

此错误通常是由于您的应用注册与您使用的身份验证库不兼容造成的

该示例中的代码使用Microsoft身份验证库(MSAL),该库使用,支持聚合身份验证(Azure AD帐户和Microsoft帐户)。为了让v2身份验证端点工作,您的应用程序注册必须来自

如果您在Azure portal()上注册应用程序,您将看到此错误。这是因为Azure门户使用Azure v1 OAuth模式注册应用程序


还有一种情况是门户可以创建v1注册。如果您登录到该门户并看到多个应用分组,以及多个“添加应用”按钮,则需要为聚合应用选择“添加应用”按钮

如果您使用
microsoftgraph/msgraph sdk dotnet auth
获取访问令牌,则
/common
端点有效


如果您使用
AzureAD/microsoft authentication library for java
获取访问令牌,请使用
/organizations
端点而不是
/common
如果您使用
microsoftgraph/msgraph sdk dotnet auth
获取访问令牌,则
/common
端点有效


如果您正在使用AzureAD/microsoft java身份验证库获取访问令牌,然后使用
/organizations
endpoint而不是
/common

不幸的是,从中添加聚合应用不再受MS支持。他们从那里重定向到Azure门户。

不幸的是,从中添加聚合应用不再受MS支持。他们从那里重定向到Azure门户。

如果需要,请告诉我有任何其他有用的代码,我可以添加,以帮助拼凑在一起。请让我知道,如果有任何其他有用的代码,我可以添加,以帮助拼凑在一起。谢谢!这为我解决了一个棘手的客户问题。我很幸运,他们输入了所有“不正确”的信息。谢谢你!这为我解决了一个棘手的客户问题。我很幸运,他们输入了所有“不正确”的信息。英雄联盟