Asp.net core 如何使MS Identity SPA示例适用于组织和个人帐户

Asp.net core 如何使MS Identity SPA示例适用于组织和个人帐户,asp.net-core,microsoft-graph-api,msal,microsoft-identity-platform,Asp.net Core,Microsoft Graph Api,Msal,Microsoft Identity Platform,我跟着做我自己的项目 我的项目已经完成了 反应 Net核心Web Api 从Hotmail访问用户的电子邮件。Reactjs应用程序和WebApi位于不同的服务器上 这个例子几乎就是我所需要的,但它只接受同一组织内的帐户,不接受个人帐户 我想我只需要在相关配置中将租户ID从特定ID更改为“公共”,它就可以工作了。 我还在Azure上注册了Web Api和Reactjs支持的帐户类型,以使用 AnyOrg+个人账户 这是Angular的配置 { "auth": { "clientI

我跟着做我自己的项目

我的项目已经完成了

  • 反应

  • Net核心Web Api

  • 从Hotmail访问用户的电子邮件。Reactjs应用程序和WebApi位于不同的服务器上

    这个例子几乎就是我所需要的,但它只接受同一组织内的帐户,不接受个人帐户

    我想我只需要在相关配置中将租户ID从特定ID更改为“公共”,它就可以工作了。 我还在Azure上注册了Web Api和Reactjs支持的帐户类型,以使用

    AnyOrg+个人账户

    这是Angular的配置

    {
      "auth": {
        "clientId": "28xxx12",
        "authority": "https://login.microsoftonline.com/common",
        "validateAuthority": true,
        "redirectUri": "http://localhost:4200",
        "postLogoutRedirectUri": "https://localhost:44321/signout-oidc",
        "navigateToLoginRequestUrl": true
      },
        "cache": {
            "cacheLocation": "localStorage"
        },
      "scopes": {
        "loginRequest": [ "openid", "profile", "Mail.Read", "offline_access", "user.read"]
      },
        "resources": {
          "todoListApi": {
            "resourceUri": "https://localhost:44351/api/todolist/",
            "resourceScope": "https://papayee008.onmicrosoft.com/papayee008/access_as_user"
          }
        }     
    }
    
    以下是Web Api的配置:

    {
      "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "Domain": "papayee008.onmicrosoft.com",
        "TenantId": "common",
        "ClientId": "28xxx12"
      },
      "https_port": 44351,
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*"
    }
    
    但当我尝试使用我的个人帐户登录时,它向我抛出了以下错误:
    最简单的解决方案是对SPA和API使用相同的应用程序/客户端id。也就是说,不必为每个组件单独注册应用程序(如自述文件中所建议的),只需注册一个应用程序,将注册服务应用程序(TodoListAPI)和注册客户端应用程序(TodoListSPA)的步骤结合在样本存储库的自述文件中即可


    编辑:根据上一个屏幕截图判断,您在AAD门户上对“支持的帐户类型”所做的更改也可能尚未生效。通常会有几秒钟的延迟,如果您在这段时间内尝试使用个人帐户登录,屏幕截图中可能会出现问题。

    如果您使用的是广告,则不能是您的个人帐户。正如您的顶部屏幕截图所示,您正在尝试使用Azure广告。请在“示例问题”页面上提出此问题。它引起了公众的注意developer@KalyanKrishna我已经这样做了,这是唯一的问题,从那时起2天过去了,没有更新。我打赌SOF比那里更受欢迎:)hi@KarthikDV我使用“common”作为我的租户ID:
    common使用他们的工作和学校帐户或个人Microsoft帐户登录用户
    这意味着我可以同时使用组织帐户和个人帐户。除非Microsoft document有错误。谢谢,我很乐意在前端和后端使用相同的客户端ID。使用相同的客户端ID和使用不同的客户端ID之间有什么区别(否则,明显的区别,例如注册1个应用程序和注册2个应用程序)以前的Azure AD(v1.0)不支持在不同的应用程序中使用相同的ID。这在Azure AD v2.0应用程序模型中有所改变,因为具有多个子组件(例如,许多微服务)的“应用程序”变得越来越常见。共享客户机ID的一个区别或优点是,它使共享变得更容易。另一个区别(缺点)是,对不相关的应用程序使用相同的客户端ID可能会产生安全风险谢谢@derisen,请您在这里提供帮助: