【问题标题】:Can I have two clients (web app + native mobile app) with one client info in IdentityServer4我可以在 IdentityServer4 中有两个客户端(Web 应用程序 + 本机移动应用程序)和一个客户端信息吗
【发布时间】:2022-01-06 05:46:37
【问题描述】:

我有两个客户端应用程序:Asp.Net MVC Core 网络应用程序和一个 Android 原生移动应用程序,以及一个作为 OpenID 服务器的 IdentityServer4 Server

我知道我必须为它们创建两个 client 记录(在 IS4's Clients 表中):

  • Hybrid Flow 用于网络应用
  • Hybrid/Authorization Code + PKCE 用于原生移动应用

但我想知道我是否可以只为他们两个创建一个Client info

【问题讨论】:

    标签: oauth-2.0 single-sign-on identityserver4 openid-connect openid


    【解决方案1】:

    我认为您应该为每个客户端创建一个客户端定义,这样您就可以更好地将它们分开,并随着时间的推移更好地根据需要改进它们。例如,还可以更轻松地在日志中将它们分开。

    然而,一个问题是为什么/如果您真的需要支持混合流程?我认为两个客户端只需要使用授权码流程。

    如果您想遵循 OAuth 2.1,那么只有两个流程可供使用,授权代码流程或客户端凭据流程。由于各种安全问题,不建议使用所有其他流程。见https://oauth.net/2.1/

    【讨论】:

    • 对于您评论的第二部分,是的,您是对的,我认为authorization code 流程是最好的选择,但对于主要问题,除了更好的日志记录之外还有其他缺点/审计分离?
    • 查看我更新的答案,这能回答您的问题吗?如果是这样,请随时接受我的回答。
    • 这很有用,谢谢,但我正在寻找一些(逻辑/安全角度)理由来决定分离/合并客户信息
    • 通过拥有单独的客户端,您可以拥有单独的安全级别(例如,如果需要)。或者如果将来需要,使用不同的签名算法。
    【解决方案2】:

    Tore 的回答给出了将这些客户分开的充分理由。如果您仍然不相信,我会转过头来 - 为什么要让两个单独的客户端使用一个逻辑客户端数据?这将在未来引起一些奇怪的问题。例如,在某些时候,您可能想要限制其中一个客户端的速率,或者更改客户端身份验证方法,甚至完全阻止其中一个。如果您不创建单独的客户端,则必须为您的两个应用程序都这样做。

    从安全的角度来看,将这两者分开是有充分理由的:Web 客户端可以是分配了机密的机密客户端。移动客户端将是一个公共客户端,没有秘密*。这是不将这两者混为一谈的充分理由,因为您会大大降低安全性。

    *事实上,最佳做法是使用DCR 并为运行您的应用的每台设备注册一个新客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-28
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 2019-04-07
      • 1970-01-01
      • 2014-08-13
      相关资源
      最近更新 更多