【问题标题】:Are wildcards allowed in IdentityServer Client Redirect UrlsIdentityServer 客户端重定向 URL 中是否允许使用通配符
【发布时间】:2019-04-24 23:04:36
【问题描述】:

我正在编写自己的测试 IdentityServer,但遇到了障碍。必须为每个基于浏览器的客户端指定 ClientUri 和 RedirectUris。我知道这些可以存储在数据库中,但是有什么方法可以在这里插入通配符吗?

我们的每个客户都会收到自己的子域,我希望通过允许尝试访问我们在 *.ourcompany.com 上的任何应用程序的所有浏览器在身份服务器中被视为同一客户端来简化用户管理。这可能吗?

【问题讨论】:

  • 如果您不正确地执行此操作,您可能会受到攻击,a.ourcompany.com 可能会尝试将 uri 用于 b.outcompany.com。确保您正确执行此操作,否则您将遇到灾难。
  • 子域如何“使用 uri”?只有 2 个主要应用程序具有客户特定的数据,用户的安全令牌将指定允许他们访问哪些公司的数据并对其进行签名以避免篡改。

标签: client identityserver4


【解决方案1】:

您可以实现自己的重定向 URI 验证器。但出于安全原因,不建议这样做,因为它会扩大攻击面。

  1. Redirect Uri Validator Interface
  2. How to register your custom validator
  3. Discussion about redirect uri


身份服务器4

我认为你可以在启动时添加AddCustomAuthorizeRequestValidator。尽管如此,还是不​​建议修改重定向 URI 验证。

  1. Add Custom services
  2. Related Discussion

【讨论】:

  • 是的,此时 IdentityServer 对我来说看起来太重了。 Plus v4 是最新的,但它似乎没有我需要的自定义用户存储等文档(上面的链接指向 v3)。但最大的问题是我想实现一个方案,其中 STS 只需生成一个身份/authZ 令牌并将其返回给浏览器,而不必在 STS 中定义所有这些角色和范围。我不需要所有的应用间功能。
  • 对不起,我没有看到这是针对身份服务器 4 的。稍微修改了答案。如果有一天您需要为不同的应用程序使用相同的用户存储,那么对身份服务器的投资将使您获得回报。关于文档和示例,即使它们可以改进,我认为已经足够在生产环境中启动和运行了。
  • 我认为它的全部功能集对其进行了权衡。我的应用程序都在他们的机器上安装了相同的 x509 证书集,因此我可以在任何地方验证和解密令牌。这意味着我可以进行更简单的基于所有权的身份验证,而不必让我的 STS 定义所有这些范围、客户端和资源。尝试在我的情况下设置 IDServ4 只是让我头疼,因为我知道我所做的大部分配置都是不必要的。即时注销功能和请求过滤是唯一需要 STS 了解消费者应用程序的事情。
  • 似乎是有效的论点 :-)
  • 将 IClientStore 注入 IRedirectUriValidator 是否有任何副作用?我的第一个实现是注入 IDatabase,但后来意识到我试图在这两个地方缓存客户端配置。只是想确保它不会造成意想不到的后果。谢谢。
【解决方案2】:

对于 IdentityServer4,您可以实现自己的 IRedirectUriValidator 并使用 Startup.cs 中的 AddRedirectUriValidator 扩展方法注册它。

services.AddIdentityServer(options =>
    {
        // ...
    })
    .AddRedirectUriValidator<CustomRedirectUriValidator>();

默认情况下,StrictRedirectUriValidator 已注册,但可以通过调用 .AddRedirectUriValidator 覆盖,如上所示。

【讨论】:

    猜你喜欢
    • 2021-05-09
    • 2022-10-02
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多