【问题标题】:How to make the MS Identity SPA example work for organization and personal accounts如何使 MS Identity SPA 示例适用于组织和个人帐户
【发布时间】:2020-08-09 03:04:26
【问题描述】:

我正在关注this link 来制作我自己的项目。

我的项目有

  1. Reactjs

  2. Asp.Net Core 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": "*"
}

但是当我尝试使用我的个人帐户登录时,它会抛出这个错误:

【问题讨论】:

  • 如果您正在使用 AD,它不能是您的个人帐户。正如您的顶部屏幕截图所示,您正在尝试使用 Azure AD。
  • 在示例问题页面上提出这个问题。它引起了开发者的注意
  • @KalyanKrishna 我已经这样做了,这是那里唯一的问题,从那时起 2 天过去了,没有更新。我敢打赌 SOF 比那里更受欢迎:)
  • 嗨@KarthikDV 我使用“common”作为我的租户 ID:common to sign in users with their work and school accounts or their personal Microsoft accounts 这意味着我可以同时使用组织帐户和个人帐户。除非微软文档有错误。

标签: asp.net-core microsoft-graph-api msal microsoft-identity-platform


【解决方案1】:

最简单的解决方案是为 SPA 和 API 使用相同的应用程序/客户端 ID。也就是说,无需为每个组件分别注册应用程序(如自述文件中所建议的那样),只需进行一个应用程序注册,您可以将 注册服务应用程序 (TodoListAPI) 的步骤结合起来在示例存储库的自述文件中注册客户端应用程序 (TodoListSPA)

编辑:从最后一个屏幕截图来看,也可能是您在 AAD 门户上对“支持的帐户类型”所做的更改尚未生效。通常会有几秒钟的延迟,如果您在此期间尝试使用个人帐户登录,则会出现屏幕截图中的问题。

【讨论】:

  • 谢谢,我很高兴为前端和后端使用相同的客户端 ID。使用相同的客户端 ID 和使用不同的客户端 ID 有什么区别(否则有明显差异,例如注册 1 个应用程序 VS 注册 2 个应用程序)
  • 以前的 Azure AD (v1.0) 不支持在不同的应用程序中使用相同的 ID。这在 Azure AD v2.0 应用模型中发生了变化,因为具有多个子组件(例如,大量微服务)的“应用程序”变得越来越普遍。共享客户端 ID 的一个区别或优势是它使app provisioning and service principal creation 更容易。另一个区别(缺点)是对不相关应用程序使用相同的客户端 ID 可能会产生安全风险
  • 谢谢@derisen,你能在这里帮忙吗:stackoverflow.com/questions/61524182/…
猜你喜欢
  • 2017-08-13
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多