我刚开始使用IdentityServer4并通过不同的教程和文章工作 .
我知道不同的架构有不同的流程 . 我主要构建单页应用程序(使用Angular) . 据我所知,我基本上有两种选项可以进行身份验证,然后进行授权:
隐式流
资源所有者密码(仅调用令牌 endpoints )
我看到的每个地方都表明,隐含流动会更好(在一方面或另一方面) .
这是为什么?
我将成为API和SPA的产品所有者 .
Implicit流程优于资源所有者密码有几个原因:
/token endpoints 应该要求客户端机密,单页应用程序(SPA)无法保证其机密安全 .
/token
用户通常比使用它的应用程序更信任OAuth2服务器 . 使用资源所有者密码流时,您的应用程序会读取用户名和密码,因此用户可能不愿意输入它 .
您的应用程序可能存在安全问题,会将密码暴露给攻击者 - 这是不必要的风险 .
使用资源所有者密码流,很难实现多种不同的身份验证方法 . 使用Implicit流程,您可以免费获得 .
也许其他人会添加其他没有出现在我脑海中的理由 .
除了Ján所做的好处之外,值得注意的是,如果您使用资源所有者密码流,您将不会获得SSO . 如果使用隐式流,Identity Server可以像任何网站一样存储用户,而使用资源所有者密码,您无法查看用户之前是否已使用Identity Server对其他服务进行了身份验证 .
2 回答
Implicit流程优于资源所有者密码有几个原因:
/token
endpoints 应该要求客户端机密,单页应用程序(SPA)无法保证其机密安全 .用户通常比使用它的应用程序更信任OAuth2服务器 . 使用资源所有者密码流时,您的应用程序会读取用户名和密码,因此用户可能不愿意输入它 .
您的应用程序可能存在安全问题,会将密码暴露给攻击者 - 这是不必要的风险 .
使用资源所有者密码流,很难实现多种不同的身份验证方法 . 使用Implicit流程,您可以免费获得 .
也许其他人会添加其他没有出现在我脑海中的理由 .
除了Ján所做的好处之外,值得注意的是,如果您使用资源所有者密码流,您将不会获得SSO . 如果使用隐式流,Identity Server可以像任何网站一样存储用户,而使用资源所有者密码,您无法查看用户之前是否已使用Identity Server对其他服务进行了身份验证 .