我们有一个预先存在的移动应用程序。用户将注册他的用户名和密码。目前,我们有基于自定义令牌的身份验证我们希望切换到OAuth2而不影响用户体验。看起来资源所有者密码凭据对我们来说是最接近的流程,但是有很多建议反对使用它们......任何其他推荐...我们计划使用IdentityServer4
答案 0 :(得分:6)
<强> tldr;使用授权代码流程+ PKCE
资源所有者密码凭据授予适用于无法转换(迁移)到完全OAuth客户端的客户端。另外,请注意规范严格提及与客户端和最终用户的信任关系。
资源所有者密码凭据授予类型适用于 资源所有者与信任关系的情况 客户端,例如设备操作系统或高权限 应用即可。授权服务器应特别小心 启用此授权类型,仅在其他流不支持时才允许 可行的。
所以你听到的是正确的。如果您没有选择,则必须使用此选项。请注意,通过使用此流程,您将失去OAuth 2.0的精髓。 您会将最终用户凭据公开给客户。!
转到OAuth 2.0
移动客户端为public clients。移动客户端的推荐授权为authorization code grant type。此外,由于它是公共客户端,您必须使用PKCE(OAuth公共客户端的代码交换校对密钥)。 PKCE为授权代码授权类型添加了额外的保护层。
迁移到OAuth 2.0需要更改移动应用程序。您将不得不重新设计应用程序的登录功能。但是不要害怕,有很多好的库可用于支持PKCE的OAuth 2.0。 IdentityServer4也将支持这些协议。
如果您采用OAuth 2.0,则可以无缝更改授权服务器(使用某些配置)。这意味着相同的应用程序可以使用来自不同授权服请参阅授权代码流程+ PKCE