【问题标题】:Many-to-many Authentication Pattern多对多认证模式
【发布时间】:2016-09-23 14:56:28
【问题描述】:

我正在尝试为一个相当不寻常的场景提出一种身份验证方案。

我有多个 Azure Active Directory(可能有几十个)和多个 Web API 服务。 客户可以注册/登录到任一 AD,然后能够使用任一服务验证请求。

简单的解决方案需要我使用有关所有 AD 的信息来配置我的所有服务。 我试图避免这种多对多关系。

我考虑过构建一个集中式令牌交换服务器的解决方案,该服务器将发布一个标准化令牌,但我不确定这种方法有多安全,我宁愿使用“开箱即用”的解决方案,而不是实现我自己的。

你会如何解决这个问题?

【问题讨论】:

  • 听起来像是一个多租户应用程序?您是否看过使用 Azure AD 构建多租户应用程序?
  • 我调查过了。问题是用户不应该能够选择使用哪个 AD 登录。它应该由重定向用户登录的服务决定。
  • 用户不选择。您输入您的电子邮件,它会根据您的电子邮件将您重定向到您组织的登录页面。
  • 我没有提到用户应该能够在多个广告中使用相同的电子邮件地址,可能使用不同的密码

标签: security authentication oauth openid azure-active-directory


【解决方案1】:

multi-tenancy support of Azure AD 旨在解决您的问题。

首先,您将服务发布为 Azure AD 中的多租户应用程序。然后租户目录管理员通过同意流程订阅应用程序。

您的服务需要将TokenValidationParametersValidateIssuer 属性设置为false 以禁用检查令牌的颁发者。

现在,用户可以使用任何目录登录,前提是他们同意该应用程序。要将此限制为仅您想要的目录,您可以将 IssuerValidator 委托添加到 TokenValidationParameters

IssuerValidator = (issuer, token, params) =>
{
    if (_db.FindIssuer(issuer) != null)
        return issuer;
    else
        throw new SecurityTokenInvalidIssuerException("Not a valid issuer");
},

【讨论】:

  • 原则上你是对的,但这不完全是我的情况。有一些额外的要求可能会相互冲突。 1. 我希望用户能够在多个租户中使用相同的电子邮件地址(可能不是问题,但是-) 2. 我不希望他们能够选择使用哪个 AD 登录,我想将他们重定向到我为他们选择的那个。 3. 我不想在他们注册时显示同意页面。我想营造一种用户直接向提供商注册的感觉。
  • 不太清楚你为什么关心用户登录的目录。除了tenantid 声明之外,颁发的令牌将是相同的。用户不会选择他们登录时使用的目录,他们只需输入他们的凭据,Azure AD 将根据他们的域选择正确的目录。如果租户管理员已完成全局同意,则不会为每个用户显示同意页面。
  • 所以你想创建一个自定义登录页面,然后调用 Azure AD Graph API 来获取身份验证令牌?可能您应该编辑您的问题,以更多地解释您的需求以及为什么默认的多租户不符合您的要求。但是你描述的是一个多租户应用程序
猜你喜欢
  • 2012-07-11
  • 2019-02-15
  • 2011-12-20
  • 1970-01-01
  • 2011-02-07
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
相关资源
最近更新 更多