相关疑难解决方法(0)

两个工作流程有什么区别?何时使用授权码流程?

OAuth 2.0具有多个工作流程.关于这两个,我有几个问题.

  1. 授权代码流 - 用户从客户端应用程序登录,授权服务器向应用程序返回授权代码.然后,应用程序交换访问令牌的授权码.
  2. 隐式授权流程 - 用户从客户端应用程序登录,授权服务器直接向客户端应用程序发出访问令牌.

这两种方法在安全性方面有什么区别?哪一个更安全,为什么?

当服务器可以直接发出Access令牌时,我没有看到为什么在一个工作流中添加额外步骤(令牌的交换授权代码)的原因.

不同的网站说,当客户端应用程序可以保证凭据安全时,使用授权代码流.为什么?

oauth oauth-2.0

152
推荐指数
5
解决办法
5万
查看次数

适用于公共第一方客户的适当OAuth2流程

我是堆栈溢出的常客,但这是我的第一个问题.

我正在使用OAuth2规范开发授权服务器.我只是在使用密码流时如何确保第一方客户端的真实性.我读了很多论坛,这就是我得到的:

  1. Javascript单页客户端

    这篇由Alex Bilbie撰写的博客文章指出,要避免client_secret问题,我们应该:

    这很简单; 通过瘦服务器端组件代理所有API调用.这个组件(我们从这里开始称之为代理)将验证来自用户会话的ajax请求.访问和刷新令牌可以以加密形式存储在cookie中,只有代理才能解密.应用程序客户端凭据也将硬编码到代理中,因此它们也不可公开访问.

    但现在这个代理可以被冒充我的角度应用的人访问.然后我从安迪菲尔德那里看到了这篇博文:单页应用的OAuth2资源所有者密码流的安全性如何.他基本上说要依靠CORS来避免冒充JS客户端.

    使用这两种方法保护我的JS应用程序是个好主意吗?

  2. 原生应用(桌面和移动)

    对于移动应用程序,我只找到了授权代码和隐式流程的案例.这不是我想要的,因为重定向会损害用户体验.所以我对此的看法是:

    我将使用ROP流程,然后使用client_id为此特定安装生成的客户端注册客户端, 并将其附加到用户帐户,接收access_tokenclient_secret响应.此客户端发出的任何其他令牌请求必须携带此凭据(因为client_id特定于安装,我将能够检查此客户端是否已经过身份验证).这样,如果有人使用任何凭证来模拟客户端,甚至注册虚假客户端,我可以使用mesures来撤销用户和客户端访问.

我知道这可能是过度思考,我也知道其中一些事情并不能避免任何事情.我觉得我的工作就是尽我所能来保护我的API.

我非常感谢您对此事的看法!我是否真的过度思考?我应该只使用"公共客户"的概念继续吗?

谢谢大家,快乐编码!

javascript security authentication mobile oauth-2.0

14
推荐指数
1
解决办法
2182
查看次数

结合API的oAuth 2.0客户端凭据和资源所有者密码凭据授予类型?

我们正在构建一个REST API,它将由我们自己的移动应用程序以及其他应用程序使用.我们希望使用似乎符合oAuths Client Credentials Grant定义的API密钥来保护它不被公开访问.

某些API端点(例如那些会修改用户资源的端点)将要求用户进行身份验证,这似乎符合资源所有者密码凭据授权定义.

这个问题基本上总结了与下面相关的相同场景,但没有要求任何实际实现可能的示例:

使用OAuth2的资源所有者密码凭据授予类型时,如何保持客户端凭据的机密性

这是一个难以构建的问题.我已经看过尽可能多的类似问题,但我们似乎都没有回答以下问题:

这样的事情如何发挥作用?除了在某些端点上为用户请求/传递access_token之外,客户端是否只传递API密钥参数/标头以及每个请求?

在源代码(特别是ruby/rails)方面,是否存在任何可公开访问的示例?

另外,我并没有严格依赖oAuth,所以让我知道是否有其他安全且经过验证的方法可以做同样的事情.

authentication api rest oauth

7
推荐指数
1
解决办法
1214
查看次数

标签 统计

authentication ×2

oauth ×2

oauth-2.0 ×2

api ×1

javascript ×1

mobile ×1

rest ×1

security ×1