问题标签 [oauth-provider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
827 浏览

java - 使用 Oauth 库在 Java 中创建“提供者”?

我下载了示例 ( https://code.google.com/p/oauth/ ),编译并将提供者和消费者 WAR 文件加载到 Apache Tomcat。

我将provider.properties 配置为: Consumer_key=mysecret(我不确定是否可以将其设置为密钥) Consumer_key.description=获取 GPS 位置 Consumer_key.callbackURL=http://localhost:8081/oauthC/OAuth/Callback

consumer.properties:sample.serviceProvider.baseURL:http://localhost:8081/oauthP/sample.serviceProvider.requestTokenURL:request_token sample.serviceProvider.userAuthorizationURL :授权 sample.serviceProvider.accessTokenURL :access_token sample.consumerKey:mysecret sample.consumerSecret : mysecret (我很困惑我应该在这个 attr 中设置什么)

并启动服务器。我访问了 http://localhost:8081/oauthC/(消费者网站)去样本,它返回了这个:

OAuthProblemException: oauth_problem:token_rejected

HTTP request: GET /oauthP/request_token?oauth_callback=http%3A%2F%2Flocalhost%3A8081%2FoauthC%2FOAuth%2FCallback%3Fconsumer%3Dsample%26returnTo%3D%252FoauthC%252FSampleProvider&oauth_consumer_key=mysecret&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1298329818&oauth_nonce=13474056411695&oauth_version=1.0 &oauth_signature=JwuEr0jprO8G3bKRhXHdqpeuuxI%3D 用户代理:Jakarta Commons-HttpClient/3.1 主机:localhost:8081

HTTP 状态:401

HTTP 响应: HTTP/1.1 401 未经授权的服务器:Apache-Coyote/1.1 WWW-Authenticate:OAuth realm="http%3A%2F%2Flocalhost.localdomain", oauth_problem="token_rejected" Content-Type: application/x-www-form -urlencoded;charset=UTF-8 内容长度:28 日期:星期一,2011 年 2 月 21 日 23:10:18 GMT oauth_problem=token_rejected

oauth_signature base string: GET&http%3A%2F%2Flocalhost%3A8081%2FoauthP%2Frequest_token&oauth_callback%3Dhttp%253A%252F%252Flocalhost%253A8081%252FoauthC%252FOAuth%252FCallback%253Fconsumer%253Dsample%2526returnTo%253D%25252FoauthC%25252FSampleProvider%26oauth_consumer_key%3Dmysecret% 26oauth_nonce%3D13474056411695%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1298329818%26oauth_version%3D1.0

网址: http://localhost:8081/oauthP/request_token?oauth_callback=http%3A%2F%2Flocalhost%3A8081%2FoauthC%2FOAuth%2FCallback%3Fconsumer%3Dsample%26returnTo%3D%252FoauthC%252FSampleProvider&oauth_consumer_key=mysecret&oauth_signature_methodamp=HMACret&oauth_signature_methodamp=-SHA 1298329818&oauth_nonce=13474056411695&oauth_version=1.0&oauth_signature=JwuEr0jprO8G3bKRhXHdqpeuuxI%3D

我被困在这一点上。任何人都可以给一个建议?或者给我看这个库的文档?我什么都找不到...

谢谢你的时间

0 投票
0 回答
1069 浏览

ruby-on-rails - 无效的 OAuth 请求

你好,对不起我的英语。我正在使用 oauth 0.4.4 和 oauth-plugin 0.4.0.pre4 gems。当我尝试以 OAuth 提供者身份访问我的应用程序时

费者引发异常p>

此请求的 Rails 日志是

当我尝试使用 curl 模拟这个请求时,我会得到

我的数据库包含一个 ClientApplication

我尝试了许多版本的 oauth 和 oauth-plugin,但我从未得到任何成功的结果。我用谷歌搜索的两个测试消费者“oauth test”向我展示了同样的结果:http: //term.ie/oauth/example/client.php http://dev.k42b3.com/index.php/oauth/consumer

我正在使用 devise 1.2.rc,但我skip_before_filter :authenticate_user!在 Application 和 Oauth 控制器中都禁用了它。

0 投票
2 回答
15634 浏览

java - Java OAuth 服务器

是否有任何开源项目可以实现 OAuth 服务器?阿帕奇基金会的?

0 投票
1 回答
245 浏览

mobile - 移动应用的oauth

我有一个服务器(网络)应用程序并公开了 RESTful 网络服务,以便第三方公司可以在它之上开发他们的移动应用程序。我想要 oAuth 进行身份验证。

我了解 oAuth 如何适用于第三方网站,但对于移动应用程序,我不确定重定向和回调以及秘密共享将如何工作?

0 投票
1 回答
3380 浏览

ruby-on-rails - oauth 提供者的 Rspec 测试

我正在编写一个也是 OAuth 提供者的 API。有什么推荐的方法来编写你的 rspec 测试吗?

启用 oauth 以保护所有端点后,如何编写将通过身份验证步骤的 rspec 测试?

0 投票
0 回答
810 浏览

ruby-on-rails - Rails oauth-plugin:多种策略导致重复的随机数错误

我有一个控制器操作,客户端可能会使用 oauth 客户端令牌(没有经过身份验证的用户)命中,或者可能会被授权客户端使用访问令牌(针对特定用户)命中。我想在过滤器之前设置一个很好的小过滤器来适应这个。我试过了:

如果我尝试使用访问令牌请求来执行此操作,那么它会抱怨,因为它会尝试记住 OauthNonce 两次。这是我的 ClientApplication.verify_request 方法的样子:

如此看来,这种行为也就不足为奇了。它通过oauth10_request_token方法运行,并且记住nonce没有问题,但是token不是请求token,所以失败了。然后,它尝试运行 oauth10_access_token,当它第二次调用 verify_request 时,它会尝试记住一个我们已经记住的 nonce。

我能想出的最佳解决方案是将 Nonce-remembering 与请求验证的其余部分分开。换句话说,服务器将首先验证随机数,然后根据需要进行多次签名验证(或其他任何 verify_request 想要做的事情)。

如果不分叉 Pelle 的 application_controller_methods 文件,我看不到一个明确的方法,但我希望我只是错过了你们中的一个人会建议的明显修复!谢谢你的帮助!如果您有兴趣,我将 rails3 与 pelle 的 oauth-plugin 和他的 oauth 分支一起使用:

0 投票
1 回答
328 浏览

api - 通过 OAuth - 3:rd 方应用程序是否应该能够为每个资源所有者保留多个访问令牌?

在我们正在开发的 API 中,访问令牌是唯一的。我的意思是每个应用程序和用户只能有一个访问令牌。

这样做的结果是,如果用户在两台计算机上对相同的第三方桌面应用程序进行身份验证,则只有第二个将具有有效的访问令牌,而第一个将不得不再次通过身份验证过程(第一个访问令牌将已失效)。

从用户体验的角度来看,这是次优的。从安全的角度来看,它提供了一个小的好处。

很想知道其他人是如何在他们的 API 中实现访问令牌的。每个用户和应用程序一个,还是多个?

0 投票
1 回答
16993 浏览

c# - 为我的 API 实施 OAuth 2.0 身份验证

我已经成功使用 Facebook Graph API(使用 oauth 2.0 进行身份验证)有一段时间了。我现在需要编写自己的 API,允许开发人员以类似的方式连接到它。我已经查看了各种库,但我想要一些更精简的东西,所以我决定自己动手。查看我必须在 facebook 上验证用户的代码,它看起来相对简单,但如果我偏离轨道,请纠正我。

首先,我需要提供消费者需要重定向到的安全页面。例如https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL。用户将验证应用程序,然后我将使用查询字符串中的 oauth_token 重定向回回调 url 中提供的 url。我想我可以在这里为 oauth_token 生成一个随机的唯一字符串,并将它存储在这个特定消费者的用户中(编辑:请参阅下面的答案,这对于每个消费者应用程序而不是用户来说应该是唯一的)。

这是第一步。我现在需要提供第二个安全页面,消费者将触发 Web 请求。例如https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY&client_secret=CONSUMER_SECRET&oauth_token=OAUTH_TOKEN_RETURNED_ABOVE。这将允许消费者将上面返回的 oauth_token 交换为访问令牌。我将再次简单地生成一个随机的唯一字符串并将其存储在该特定消费者的用户中。

现在我的 API 将接受 access_token 用于尝试获取特定于使用它的用户的信息的方法。

我想知道我是否理解正确。如果是这样的话,OAuth 2.0 规范似乎极其微不足道。另外,为什么我们必须用 access_token 交换 oauth_token?我有自己的想法,但如果有人能帮助澄清这一点,我将不胜感激。

我非常感谢您的反馈,因为我不希望在完全错误的情况下继续浪费时间来实现这一点。

谢谢

0 投票
2 回答
2178 浏览

php - 纯 PHP OAuth 提供程序

是否有一些代码(最好在 BSD 或类似许可下)实现对 OAuth 的提供者支持而无需 PECL OAuth 扩展?Zend Framework 的 Zend_Oauth 很不错,但它只是消费端。所以我想知道除了做另一边(即制作OAuth服务器)之外是否有类似的东西。

请注意,我不是在寻找如何使用 pecl/oauth 来做到这一点 - 我已经有了,例如,请参阅设置 PHP OAuth 提供程序- 但不幸的是,并非所有人都可以安装 PECL 扩展,所以我正在寻找一些减少需求的解决方案。

0 投票
3 回答
9991 浏览

javascript - Javascript 中的安全 OAuth

我有一个使用 OAuth 1.0a 对使用它的应用程序进行身份验证的 api。它正在替换一个旧的 api,该 api 使用了许多已被弃用的自定义构建和大杂烩调用。

众所周知,OAuth 1.0a 在(客户端)Javascript 中是不安全的,因为它依赖于保密的消费者秘密。这是不可能的,因为源始终可见。

我们有 Chrome、Firefox、IE 和 Safari 的浏览器扩展,将来需要使用这个 api。这些扩展大部分或完全用 Javascript 编写,因此存在安全问题。

这些扩展是内部的,因此可以使用自定义身份验证方法来获取其访问令牌。

我计划实施的内容如下:

  • 用户在浏览器中登录网站。
  • 该网站向他们发送一个带有会话密钥的 cookie。
  • 然后,我们的扩展程序获取该 cookie 并将其传递给 api。
  • 该 api 验证它是一个有效且活动的会话,并向扩展发出其访问令牌。
  • 这些令牌在到期前最多持续一小时。
  • javascript 发布的 cookie 的速率限制也会较低。

它在以下假设下运作:

  • 如果另一个应用程序可以访问您的 cookie,那么他们无论如何都可以在网站上冒充您,因此访问 api 没有什么不同。
  • 所有身份验证方法仍然通过我们的控制。
  • 令牌的定期到期意味着如果它们被破坏,那么利用的时间是有限的。

我的问题是,这是限制对 api 的访问的安全方法吗?有没有更好的?

一些笔记。 我知道 chrome 扩展可以请求访问给定站点的 cookie 的权限。我相信 Firefox 扩展也可以做到这一点。

显然,我们不希望通过任何页面上的 javascript 访问我们的 cookie,否则我们会将自己暴露于 XSS 攻击,因此它们只需要通过扩展来访问。