为多租户应用选择最近的权限匹配

时间:2017-03-29 14:46:13

标签: adal

我们有一个多租户应用,在创建新的AuthenticationContext时已经传入“ login.windows.net/common ”。我们错过了备忘录,不久之前已经弃用了“ login.microsoftonline.com/common ”。现在转换的动力是我们的客户也不会工作(例如因为他们落后于“ login.microsoftonline.de ”)。

我们理解正确的方法是首先查询“ login.microsoftonline.com/ tenant-domain-name /。熟知/ openid-configuration ”,并且使用我们获得的端点,而不是硬编码 login.microsoftonline.com 。我们想知道的是应该使用我们得到的字段。

我无法找到权威字符串应该是什么的权威(没有双关语)来源。我检查过的一些地方:

  • AuthenticationContext的文档说权限是“颁发令牌的权限的地址。”
  • 将AAD与Windows应用商店应用集成的开发人员指南引用了创建具有权限的AuthenticationContext,但未说明应具备的权限。
  • Windows应用商店应用的示例代码使用“ login.microsoftonline.com/ 租户 ”。
  • AAD文档对多租户应用说,请使用“ login.microsoftonline.com/common ”。
  • StackOverflow上的其他答案已经涵盖了那些特定路径(如“/ oauth2 / token”)等等。

因此,在我们查询发现服务之后,我们将使用什么来获取权限?

  • authorization_endpoint?
  • token_endpoint?
  • 将tenant_region_scope映射到右侧login.microsoftonline.com变体,并追加“/ common”?或“/ 租户”?

谢谢。

2 个答案:

答案 0 :(得分:0)

https://login.microsoftonline.com/{common-or-tenant}/.well-known/openid-configuration元数据文档可用于确定用户登录的权限URL(它是OpenID Connect标准的一部分)。通常,开发人员将使用OpenID Connect库或包来使用此元数据文档并构造对它们的请求。但如果您打算自己消费,我建议您阅读OpenID Connect Discovery spec。它将指示您authorization_endpoint是用于登录用户的URL。

回复:普通与租户。当您不知道用户所属的公司/租户/目录时,可以使用公共端点。这是最常见的情况。如果您以某种方式知道用户属于哪个租户(他们为您的公司工作,他们以某种形式告诉您,等等)您可以改为使用租用端点。这将直接将用户引导至其公司的登录页面,而不是执行查找用户所属租户的发现步骤。

答案 1 :(得分:-1)

要登录多租户应用,我们需要使用https://login.microsoftonline.com/common。以下是该文件的解释供您参考:

  

当响应从/ common端点返回时,令牌中的颁发者值将对应于用户的租户。重要的是要注意/公共端点不是租户而不是发行方,它只是一个多路复用器。使用/ common时,需要更新应用程序中用于验证令牌的逻辑以将其考虑在内。

因此,我们需要在授权端点中使用 common 。之后,我们可以获得真正的租户并在令牌端点中使用特定租户。

  

将tenant_region_scope映射到正确的login.microsoftonline.com变体,并附加“/ common”?或“/租客”?

你对tenant_region_scope有什么看法?根据我的理解,多租户应用的范围与单租户应用相同。例如,Microsoft Graph是一个多租户应用程序,其范围可以参考here

以下是有关多租户应用开发的有用文章和代码示例:

How to sign in any Azure Active Directory (AD) user using the multi-tenant application pattern

Build a multi-tenant SaaS web application that calls a web API using Azure AD