Authentication 具有动态客户端注册的OAuth2资源所有者密码凭据

Authentication 具有动态客户端注册的OAuth2资源所有者密码凭据,authentication,oauth-2.0,native,identityserver4,claims-based-identity,Authentication,Oauth 2.0,Native,Identityserver4,Claims Based Identity,我正在一个新的本地应用程序(iOS和Android)中实现登录,并决定采用哪种身份验证。关于OAuth有一些非常明确的指导方针,指出这应该使用外部代理(浏览器)来完成,这就导致我使用PKCE授予授权代码 在这里实施: 然而,我的设计师和产品负责人对此表示怀疑。他们不太喜欢这种登录方式(他们不喜欢地址栏),他们想探索资源所有者密码凭据选项。基本上是直接登录。他们的论点是,这是简单和熟悉的 我不想危及安全,因此我拒绝这个选择。但是我读过一些文章,这些文章似乎建议,如果我动态生成用于身份验证请求的客

我正在一个新的本地应用程序(iOS和Android)中实现登录,并决定采用哪种身份验证。关于OAuth有一些非常明确的指导方针,指出这应该使用外部代理(浏览器)来完成,这就导致我使用PKCE授予授权代码

在这里实施:

然而,我的设计师和产品负责人对此表示怀疑。他们不太喜欢这种登录方式(他们不喜欢地址栏),他们想探索资源所有者密码凭据选项。基本上是直接登录。他们的论点是,这是简单和熟悉的

我不想危及安全,因此我拒绝这个选择。但是我读过一些文章,这些文章似乎建议,如果我动态生成用于身份验证请求的客户端,这可能是安全的:

授权服务器不得发布客户端密码或其他
基于本机应用程序或用户代理的客户端凭据
用于客户端身份验证的应用程序客户端 授权服务器可能会发出客户端密码或其他凭据 用于在
特定设备。

以下是AppAuth文档的备份:

我的解释正确吗?我正在考虑在应用程序中进行初始用户注册,该应用程序将返回一个访问令牌,该令牌可用于动态生成一个客户端(具有机密),该客户端可用于使用ROPC登录

我认为要安全,那么这个动态生成的客户端应该只用于单个用户的登录-每个用户一个客户端,但是每个设备一个客户端也足够安全


看起来有点“手摇”,所以我很紧张。我这样做对吗

使用ROPC,您需要保护应用程序,因为它必须处理凭据,而在其他流中,应用程序仍然不知道。你正在将责任转移到一个公共应用程序上。请阅读:虽然ROPC属于“过时”类别,但AppAuth属于“最佳当前实践”类别。将此信息反馈给其他设计师/产品负责人。除非他们有真正的论点,否则你不应该调查ROPC。怀疑意味着他们还没有被说服。谢谢@Ruard。我读过那篇文章,它是众多让我想避免ROPC的文章之一。看起来我们将决定使用appauth实现(Auth代码)。让我恼火的是,我不知道有多少其他玩家正在实现这一点。很多人,包括真正的大公司,似乎都在使用ROPC。考虑到其明显的缺陷,这似乎很奇怪。也许真正的大玩家只是不相信应用程序作为一项规则。在这种情况下,更改身份验证不会提高安全性。我可以想象,他们不仅仅依赖身份验证令牌。安全有多个方面。他们可能使用额外的信息和算法来保护他们的资源。比如当你从另一台设备登录时,谷歌给你发送电子邮件。如果你遵循最佳实践,ROPC应该可以很好地工作。此外,我会选择每个设备一个客户端,而不是每个用户一个客户端。谷歌使用PKCE实现,使用设备的浏览器而不是嵌入式用户代理进行登录。如果您从另一个应用程序使用google single sign-in,这是正确的。(2017年关于病房)。ROPC的一个问题是,用户不知道登录在哪里经过身份验证,这将吸引攻击者在apple store上创建类似的外观应用程序。使用ROPC,您需要保护应用程序,因为它必须处理凭据,而在其他流中,应用程序仍然不知道。你正在将责任转移到一个公共应用程序上。请阅读:虽然ROPC属于“过时”类别,但AppAuth属于“最佳当前实践”类别。将此信息反馈给其他设计师/产品负责人。除非他们有真正的论点,否则你不应该调查ROPC。怀疑意味着他们还没有被说服。谢谢@Ruard。我读过那篇文章,它是众多让我想避免ROPC的文章之一。看起来我们将决定使用appauth实现(Auth代码)。让我恼火的是,我不知道有多少其他玩家正在实现这一点。很多人,包括真正的大公司,似乎都在使用ROPC。考虑到其明显的缺陷,这似乎很奇怪。也许真正的大玩家只是不相信应用程序作为一项规则。在这种情况下,更改身份验证不会提高安全性。我可以想象,他们不仅仅依赖身份验证令牌。安全有多个方面。他们可能使用额外的信息和算法来保护他们的资源。比如当你从另一台设备登录时,谷歌给你发送电子邮件。如果你遵循最佳实践,ROPC应该可以很好地工作。此外,我会选择每个设备一个客户端,而不是每个用户一个客户端。谷歌使用PKCE实现,使用设备的浏览器而不是嵌入式用户代理进行登录。如果您从另一个应用程序使用google single sign-in,这是正确的。(2017年关于病房)。ROPC的一个问题是,用户不知道登录在哪里经过验证,这将吸引攻击者在apple store上创建类似的外观应用程序。