【发布时间】:2017-12-06 11:28:46
【问题描述】:
我想实现一个登录流程,用户可以使用
登录我的网站- 第三方 Oauth 提供者,或者
- 电子邮件 ID 和密码。
对于第 1 点,我明白了
- 授权类型为“授权码”。
- 我的网站会将用户重定向到第三方 Oauth 提供商
- 我将获得一个授权码,然后使用该码访问令牌。
对于第 2 点,
- 我将托管一个 Oauth 服务器
- 我不想将用户重定向到其他页面,因此“授权代码”、“客户端凭据”和“隐式”授权类型不是我想要的。
- 这给我留下了“资源所有者密码凭据”。
- 如果我使用“资源所有者密码凭据”,我必须向 Web 应用程序公开客户端密码,我听说这是个坏主意。
我的查询:
- 在不将用户重定向到不同页面的情况下,获取访问令牌的最合适方法是什么。目前,授权服务器是托管主应用程序的服务器。我希望这可以使用存储在我的网站上的电子邮件和密码来验证用户
- 如果“资源所有者密码凭据”是可行的方法,那么公开客户端机密会带来哪些安全隐患。
我是 Oauth 的新手,所以如果我在任何地方有错误,请纠正我。
注意:我的客户端应用程序是浏览器中的 Angular 2 应用程序。
谢谢。
【问题讨论】:
-
对于第 1 点,我可能会使用为单页应用程序设计的隐式流程 - 您的 Angular 应用程序将是 OAuth2 客户端,而不是后端。
-
我认为这两种代码流都适用于这种情况,因为我有一个可以用代码交换令牌的后端。