我正在尝试为一个非常不寻常的场景提出身份验证方案。
我有多个Azure Active Directory(可能有几十个)和多个Web API服务。 客户可以注册/登录任一AD,然后能够使用任一服务对请求进行身份验证。
直接的解决方案要求我使用有关所有AD的信息配置我的所有服务。 这种多对多的关系就是我想要避免的。
我考虑过构建集中式令牌交换服务器的解决方案,该服务器将发出规范化令牌,但我不确定这种方法有多安全,我宁愿使用“开箱即用”解决方案而不是实施我自己的。
你会如何解决这个问题?
答案 0 :(得分:0)
multi-tenancy support of Azure AD旨在解决您的问题。
首先,您将服务作为Azure AD中的多租户应用程序发布。然后租户目录管理员通过同意流程订阅应用程序。
您的服务需要将ValidateIssuer
的TokenValidationParameters
属性设置为false,以禁用检查令牌的颁发者。
现在,用户可以使用任何目录登录,前提是他们同意该应用程序。要将此限制仅限于您想要的目录,您可以向IssuerValidator
添加TokenValidationParameters
委托。
IssuerValidator = (issuer, token, params) =>
{
if (_db.FindIssuer(issuer) != null)
return issuer;
else
throw new SecurityTokenInvalidIssuerException("Not a valid issuer");
},