我正在新的本机应用程序(iOS和Android)中实现登录,并决定采用哪种身份验证。关于OAuth的一些非常明确的准则指出,应该使用外部代理(浏览器)来完成此操作,这使我进入了PKCE的授权代码授予
https://tools.ietf.org/html/rfc8252
此处的实现:https://appauth.io/
但是,我的设计师和产品所有者对此表示怀疑。他们看不到这种登录方式(他们不喜欢地址栏),并希望探索“资源所有者密码凭证”选项。本质上是直接登录。他们的论点是它简单而熟悉。
我不想破坏安全性,因此我拒绝使用此选项。但是...我读过一些文章,似乎暗示如果我动态生成用于身份验证请求的客户端,这可能是安全的:
https://tools.ietf.org/html/rfc6749#section-10.1
授权服务器不得发布客户端密码或其他密码
本机应用程序或基于用户代理的客户端凭据
客户端身份验证目的的应用程序客户端。 The
授权服务器可以发布客户端密码或其他凭证 用于在
上特定安装本机应用程序客户端 特定设备。
这由AppAuth文档在这里备份:
https://github.com/openid/AppAuth-Android#dynamic-client-registration
https://tools.ietf.org/html/rfc7591
我正确解释了吗?我正在考虑在应用程序中进行初始用户注册,该应用程序将返回访问令牌,该令牌可用于动态生成客户端(具有机密信息),可用于使用ROPC登录。
我认为是安全的,那么此动态生成的客户端仅应用于单个用户的登录-每个用户一个客户端,但每个设备一个客户端也许也足够安全。
似乎有点“手摇”,所以我很紧张。我是对的吗?