繁体   English   中英

绕过 Azure B2C 重定向 uri 限制

[英]Bypass Azure B2C redirect uri limit

背景

使用 Azure B2C 配置身份验证时,您在 Azure 中注册您的应用程序并指定允许 Azure 重定向回的返回 Uri。 这些重定向 Uri 的最大限制为 256 个 uri 我为其实现此功能的客户有多个子域和顶级域,这些子域和顶级域指向具有不同文化的同一站点(使用 Optimizely CMS)。 这意味着如果所有这些都在应用程序中注册,他们将突破 256 个 Uri 的限制。 此外,在应用程序注册中配置每个 Uri 将是一项繁琐的工作。 因此,我试图在不破坏最佳实践的情况下找出解决此问题的最佳方法。

期待

我希望找到一种解决方案,让我只需要在 Azure 应用程序注册中注册一个或一个完整的重定向 Uri,但仍然能够使用多个不同的子域和顶级域来启动身份验证流程。

方法

状态参数使用状态参数,您可以在整个身份验证流程中传递自定义数据。 通过这种方式,您可以传递自己的重定向 Uri。 但是,这似乎只适用于路径和子域,而不适用于顶级域。 如果我传递的顶级域与我正在启动身份验证的顶级域不同,我最终会陷入重定向循环。 我的猜测是,这是由于 cookie 无法设置,因为它是跨域的。

通配符 Uri's通过使用通配符定义 Uri's,可以最大限度地减少注册域的数量。 但由于安全隐患,不推荐使用这种方法。

多个应用注册一种方法是配置 OpenIdConnect 解决方案来处理多个应用注册。 因此,一组 Uri 连接到一个应用程序注册,另一组连接到另一个应用程序。 并且根据请求 url,使用正确的应用程序注册来发起身份验证请求。 这对我来说是一个很好的解决方案,但它并没有减少添加所有重定向 Uri 和维护它们所需的工作量。

在自定义解决方案中包装身份验证流程在这种方法中,只有一个特定的顶级域(域 A)将用于启动对 Azure B2C 的身份验证。 想要从域 B 登录的用户将单击登录按钮,该按钮会将用户重定向到域 A,在域 A 中启动对 Azure B2C 的身份验证。 当用户通过身份验证时,用户将被重定向回域 A,在域 A 中创建令牌(或类似的),然后发送回域 B。当令牌到达域 B 时,它被保存在会话中,然后用户被认为已通过身份验证。 我不喜欢这种方法。 如果使用这种方法,感觉 Azure B2C 的全部目的都会丢失,而且这会增加更多的复杂性和攻击向量。

问题

您会推荐这些方法吗? 我错过了其他可能有效的方法吗?

作为前 Episerver/Optimizely 开发人员,我不得不说,如果您超过 256 个域/子域,我会重新考虑您的架构方法。 您是否为每个语言版本使用不同的子域?

无论如何,如果您坚持您的方法,我建议将每个顶级域注册为单个重定向 Uri,然后处理状态中的子域/路径。 这可能意味着身份验证是在www.domain.com下处理的,然后使用状态将您重定向回en.domain.comde.domain.com 这可能需要实现一个自定义控制器来正确处理身份验证流程、状态和设置 cookie 域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM