标签: oauth2

OAuth2/OpenID Connect受保护API的自动API测试

我正在研究一个我们计划首先执行API的新项目,以便我们可以在其上实现Web和本机应用程序,并允许第三方集成.到目前为止所有相当标准.

我们还希望为API提供一整套自动化测试,以确保其无回归地工作,并确保其满足要求.同样,相当标准,但因为我们正在测试API,我们将使用代码内HTTP客户端而不是Web浏览器.

我们一直在寻找oauth2/OpenID Connect来促进API的身份验证和授权 - 基本上,客户端可以进行身份​​验证,获取访问令牌,然后使用它来访问所有API资源.

我正在努力解决的问题是让自动化测试与oauth2部分协同工作以实现调用API的好方法.第一个想法是使用"client_credentials"或"密码"授权类型,它们似乎都适用于我们想要的东西,但它们根本没有涵盖在OpenID Connect规范中,当然还有"密码" "无论如何,至少它通常不被认为是个好主意.

这是实现这一目标的最佳方式,还是有其他最佳实践可用于其他流程,但没有Web浏览器?

编辑:在(更多)阅读之后,我有了一个新的计划.完全脱机运行测试,使用针对单独数据库的单独部署,并在测试运行之前将数据直接播种到数据库中,然后使用标准OpenID Connect流,但使用:

  • 出于测试目的在数据库中标记的客户端.这是一个重要的部分,只有在客户端可以直接注册到数据库而不通过业务逻辑的情况下才有可能.
  • 提示=无
  • login_hint =获取访问令牌的用户名
  • 包含"测试"的范围

然后,系统可以检测到这种事实组合,并自动验证提供的用户名,而无需通过浏览器.

这看起来合情合理吗?或者,还有更好的方法?

acceptance-testing openid-connect e2e-testing oauth2

18
推荐指数
1
解决办法
3008
查看次数

谷歌驱动器API下载文件 - python - 没有下载文件

我尝试了多种方法从谷歌驱动器通过oauth和API下载文件,但是我无法下载文件.我相信我已经正确认证了.运行我的代码后,看起来下载文件成功(没有错误),但没有下载文件.

这是我到目前为止尝试的代码:

def download_file(file_id, mimeType):
    if "google-apps" in mimeType:
        return
    request = drive_service.files().get(fileId=file_id)
    fh = io.BytesIO()
    downloader = MediaIoBaseDownload(fh, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        print "Download %d%%." % int(status.progress() * 100)
Run Code Online (Sandbox Code Playgroud)

但是,这会导致"下载100%".被打印到控制台,但没有下载文件.

我也尝试过:

def download2(download_url):
    resp, content = drive_service._http.request(download_url)
    if resp.status == 200:
        print 'Status: %s' % resp
        return content
    else:
        print 'An error occurred: %s' % resp
        return None
Run Code Online (Sandbox Code Playgroud)

这也不会产生下载的文件,但它确实给了我200条消息.

这两个似乎都正确地与API联系.我需要做一些额外的步骤来实际获取计算机上的文件吗?

编辑:

这是我的代码的其余部分:

import json
import webbrowser

import httplib2
import io
from …
Run Code Online (Sandbox Code Playgroud)

python google-drive-api oauth2

15
推荐指数
2
解决办法
1万
查看次数

yarn自我更新抛出OAuth2身份验证错误

我正在尝试使用该yarn self-update命令来查看它是如何工作的,但它不会更新Yarn版本,而是抛出OAuth错误,如此

yarn self-update
yarn self-update v0.15.1
error OAuth2 authentication requires a token or key & secret to be set
    at __dirname.authenticate (/Users/nikjohn/.nvm/versions/node/v6.4.0/lib/node_modules/yarn/node_modules/github/lib/index.js:334:23)
    at Object.<anonymous> (/Users/nikjohn/.nvm/versions/node/v6.4.0/lib/node_modules/yarn/lib/cli/commands/self-update.js:30:12)
    at next (native)
    at step (/Users/nikjohn/.nvm/versions/node/v6.4.0/lib/node_modules/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30)
    at /Users/nikjohn/.nvm/versions/node/v6.4.0/lib/node_modules/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:35:14
    at new Promise (/Users/nikjohn/.nvm/versions/node/v6.4.0/lib/node_modules/yarn/node_modules/core-js/library/modules/es6.promise.js:191:7)
    at Object.<anonymous> (/Users/nikjohn/.nvm/versions/node/v6.4.0/lib/node_modules/yarn/node_modules/babel-runtime/helpers/asyncToGenerator.js:14:12)
    at Object.run (/Users/nikjohn/.nvm/versions/node/v6.4.0/lib/node_modules/yarn/lib/cli/commands/self-update.js:99:17)
    at run (/Users/nikjohn/.nvm/versions/node/v6.4.0/lib/node_modules/yarn/lib/cli/index.js:237:18)
    at config.init.then (/Users/nikjohn/.nvm/versions/node/v6.4.0/lib/node_modules/yarn/lib/cli/index.js:345:12)
info Visit http://yarnpkg.com/en/docs/cli/self-update for documentation about this command.
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样做以及需要做些什么才能解决这个问题?根据这里的文档,这个命令没有任何这样的OAuth依赖和恕我直言,它也不应该.

看起来这里已有PR了

编辑:进一步的研究表明,这是纱线的一个已知错误.但仍无法解决问题.如果修复程序作为新版本推出,那将是一个奇怪的catch22,但是由于命令失败,用户无法更新.一种可能的解决方案是yarn self-update [tag]代替yarn self-update,但这仍然是一个错误.*

编辑: …

runtime-error npm oauth2 yarnpkg

13
推荐指数
2
解决办法
2261
查看次数

使用at_hash验证访问令牌

我正在尝试针对at_hash验证访问令牌.令牌标题是这样的

{ "typ": "JWT", "alg": "RS256", "x5t": "MclQ7Vmu-1e5_rvdSfBShLe82eY", "kid": "MclQ7Vmu-1e5_rvdSfBShLe82eY" }

如何从访问令牌获取id标记中的Base64编码的at_hash声明值?是否有可以帮助我的在线工具?SHA256哈希计算器不是一个正确的工具吗?

谢谢

rsa identityserver3 oauth2

12
推荐指数
1
解决办法
1836
查看次数

Instagram OAuth登录返回"未找到匹配代码或已使用"

所以我有一个登录Instagram的网络应用程序.工作好几个月.没有代码改变,突然间我得到了

{"code": 400, "error_type": "OAuthException", "error_message": "Matching code was not found or was already used."}
Run Code Online (Sandbox Code Playgroud)

在我的浏览器上登出instagram.com并使用我的网络应用程序登录instagram oauth ....现在可行.它反复运行(使用instagram oauth登录和注销我的应用程序).工作良好.

直到我在浏览器上访问www.instagram.com网页.然后我的oauth登录再次失败并出现同样的错误.在我退出instagram.com本身之前,我无法再次使用Instagram oauth登录我的网络应用程序

omniauth instagram oauth2

11
推荐指数
1
解决办法
4227
查看次数

Android:GoogleAuthUtil.getToken - 应该来自哪个帐户对象?

GoogleAuthUtil.getToken要求它的第二个参数是帐户对象,但是当您使用Google SignIn连接时,结果中的结果是GoogleSignInAccount - 这不是一回事.有没有办法将GoogleSignInAccount转换为Account对象?

 private void handleSignInResult(GoogleSignInResult result) {

        if (result.isSuccess()) {

            googleSignInAccount = result.getSignInAccount();

        }
    }
Run Code Online (Sandbox Code Playgroud)

然后:

authToken = GoogleAuthUtil.getToken(context, [need an account here], scope);
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过显示accountpicker来获取电子邮件地址,我也可以从google登录结果中获取电子邮件地址 - 但我看不到获取整个帐户对象的方法.

android google-authentication google-signin googlesigninaccount oauth2

10
推荐指数
1
解决办法
2024
查看次数

为什么我不能在浏览器中存储oauth刷新令牌?

我想在浏览器中存储oauth刷新令牌.我想将它存储在那里的原因是应用程序可以刷新访问令牌并让用户不间断地继续他们的会话.我还想消除服务器上存储令牌的任何缓存的需要,从而使其成为有状态的.

我被告知在浏览器中存储刷新令牌是错误的,因为它不安全.

我认为没关系,因为:

  • 令牌将存储在httpOnly,安全会话cookie中,因此它们不应容易受到中间攻击中的XSS或人员的攻击,并且当用户关闭其会话时它们将被丢弃.
  • 与服务器的所有通信都通过HTTPS完成
  • 如果检测到可疑活动,则刷新令牌可以无效
  • 最重要的是,除非您知道仅由服务器知道的客户机密钥,否则您无法使用刷新令牌.

我认为它应该没问题我错了吗?请解释原因!

security authentication web-applications oauth2 refresh-token

10
推荐指数
1
解决办法
2526
查看次数

隐式流的安全风险是什么?

隐含流动被认为是不安全的.我知道两个问题:

  1. 困惑的副手.但要克服它,您只需要检查是否为您的应用程序提供了access_token.没有大碍.
  2. XSS攻击.因此,如果我们的access_token通过XSS攻击被盗,它可以用于发出请求(这是我们最初请求的范围的一部分).它很糟糕,但很难窃取access_token,因为我们很可能只在我们的登录页面上拥有它并且没有存储在app状态,因为它的生命很短(我猜这就是Implicit工作流不支持刷新令牌的原因).

它看起来并不太糟糕.是否还有其他我不知道的安全漏洞?

oauth-2.0 facebook-oauth google-oauth oauth2

10
推荐指数
1
解决办法
3689
查看次数

未授权客户端和访问拒绝有什么区别

我在看的oauth2规格,我迷茫unauthorized_clientaccess_denied错误代码。它们似乎表达了相同的错误条件,不是吗?乍一看(通过错误代码),我认为一个是身份验证失败,另一个是授权失败,但它们实际上都是关于授权失败,这将转换为 http 403 状态代码。

 unauthorized_client
       The client is not authorized to request an access token
       using this method.

 access_denied
       The resource owner or authorization server denied the
       request.
Run Code Online (Sandbox Code Playgroud)

rfc6749 oauth2

9
推荐指数
1
解决办法
1万
查看次数

在Cookie中存储OAuth令牌是不是很糟糕?

在Cookie中存储OAuth 2令牌是不是很糟糕?如果是这样,什么是Web应用程序的替代品?

html cookies web-applications oauth oauth2

9
推荐指数
3
解决办法
1万
查看次数