标签: 2-legged

两条腿的oauth如何在OAuth 2.0中运行?

在OAuth 1.0中,2-legged非常容易:只需像往常一样发送请求并省略access_token标题.

OAuth 2.0中的情况似乎已经发生了变化(我今天发现了很多:)).在OAuth 2.0中,请求不再具有诸如nonce,使用者密钥,时间戳等的标头.这只是替换为:

Authorization: OAuth ya29.4fgasdfafasdfdsaf3waffghfhfgh
Run Code Online (Sandbox Code Playgroud)

我理解3脚授权如何在OAuth 2.0和应用程序流程中工作.但是如何在2.0版本中进行双腿工作?是否可以设计一个既支持2脚和3脚OAuth 2.0的API?

我一直在寻找有关这方面的信息,但我已经找到了很多关于1.0的两条腿的东西,几乎没有2.0的东西.

2-legged oauth-2.0

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

实施双腿OAuth提供商

我试图找到我的方法来解决OAuth规范,它的要求以及我能找到的任何实现,到目前为止,它似乎比它的价值更麻烦,因为我很难找到一个可以将它全部拉到一起的资源.或者也许只是因为我正在寻找比大多数教程更专业的东西.

我有一组现有的API - 一些是Java,一些是PHP - 我现在需要保护它,并且出于多种原因,OAuth似乎是正确的方法.不幸的是,我无法找到合适的资源来帮助我启动和运行提供商,这对该理论提出了挑战.由于大部分将是系统到系统的API使用,我需要实现一个两条腿的提供程序.考虑到这一点...

  1. 有谁知道用PHP实现一个2脚OAuth提供程序的任何好教程?
  2. 鉴于我有2种语言的安全API,我是否需要在两者中实现提供者,或者有没有办法将提供者创建为"前端控制器",我可以将所有请求汇集到一起?
  3. 例如,在保护PHP服务时,是否必须通过在每个API上包含必需的提供程序资源来单独保护每个API?

谢谢你的帮助.

oauth 2-legged oauth-provider

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

OAuth 1.0 - 如何实现2脚和3脚身份验证?

我已经实现了OAuth 1.0a提供程序,并且使用标准的3-legged身份验证,可以使用OAuth客户端成功对其进行身份验证.

OAuth保护我服务器上的REST API,并且我有一个消费它的移动应用程序.

在我的移动应用程序中,我有一些功能(端点),甚至可以在最终用户登录其私人帐户之前访问.
有些用户甚至可能只想在不创建帐户的情况下使用公共功能.

我想用OAuth保护"公共"和"私有用户"端点.

因此,我认为要走的路是以下列方式使用OAuth(但我可能错了......非常错误).

应用程序首次启动后,移动应用程序将首先执行双腿身份验证.这样,移动应用程序将获得"双腿"令牌.移动应用将使用此令牌访问公共端点.

当(以及如果)用户请求登录应用程序时,移动应用程序将执行3-legged身份验证并获得"3-legged token".从现在开始,应用程序将忘记之前的2条腿令牌,并使用3条腿令牌访问公共和私有端点.

1)第一个问题.那有意义吗?还有另一种好办法吗?

现在我的问题是:我怎么能(服务器提供商)知道移动应用程序是否想要使用2-legged进行身份验证?我想,作为提供者,我需要知道为了决定是否将客户端重定向到登录表单以供用户填写(在3脚的情况下)或者我将只发出已经授权的请求令牌(在2脚的情况下),以便可以交换访问令牌(对于3脚).

我这样做的想法是为客户提供2个消费者密钥:一个在他们想要两条腿时使用,一个在他们想要三条腿时使用.我作为提供商,我将根据收到的消费者密钥知道要提供哪些流量.

2)第二(和最后一个问题).这是明智的吗?有没有更好的方法来实现它?

我看到人们通过允许客户端(消费者)发送空访问令牌来实现双腿.是这样的,相反?

谢谢.

oauth 2-legged

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

Oauth2 - 客户端凭据流中长期存在的令牌与重新认证

我们使用OAuth2保护了我们的REST服务器,并为我们控制的多个客户端应用程序实现了客户端凭据授权类型.现在我们面临的决定是让令牌长期存在(即它们"永不"到期)或者让客户经常进行reAuthenticate(取决于刷新令牌到期).第一个意味着被捕获的令牌可以被恶意方使用,第二个意味着经常暴露客户机密,然后可以用来获取令牌.

哪个在资源服务器到客户端 - 服务器身份验证更安全?如果我们怀疑盗窃,令牌和客户机密密码都可能无效.显然所有通信都是通过https完成的.

目前我们认为客户端密钥比令牌更强大,因此对于这种双腿情况,长寿命令牌应该更好.(对于我们即将实施的任何三条腿授权类型,我们更喜欢用作用户会话的短期令牌).

谢谢你的想法!

security rest 2-legged access-token oauth-2.0

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

有没有人使用DNOA实现2 Legged OAuth?

我正在尝试在CSharp中创建一个身份验证模块,我需要使用用于2 Legged OAuth的DotNetOpenAuth(DNOA)库来验证请求中的签名,它只有消费者密钥和密钥.

如果您使用DNOA进行任何示例实施2 Legged OAuth,那将会很有帮助.如果没有,任何关于如何实施的想法也会起作用.任何帮助将非常感激.

c# provider oauth 2-legged two-legged

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

如何告知控制器规范使用签名的OAuth请求

我正在为我的api构建一个2-legged OAuth提供程序.一切都正常连接,我可以从rails控制台进行签名调用.我遇到的问题是我无法将OAuth集成到controller_spec.

以下是我的服务器上的工作调用示例:

coneybeare $ rails c test
Loading test environment (Rails 3.2.0)
rails test: main 
>> consumer = OAuth::Consumer.new("one_key", "MyString", :site => [REDACTED])
# => #<OAuth::Consumer:0x007f9d01252268 @key="one_key", @secret="MyString", @options={:signature_method=>"HMAC-SHA1", :request_token_path=>"/oauth/request_token", :authorize_path=>"/oauth/authorize", :access_token_path=>"/oauth/access_token", :proxy=>nil, :scheme=>:header, :http_method=>:post, :oauth_version=>"1.0", :site=>[REDACTED]}>  

ruby: main 
>> req = consumer.create_signed_request(:get, "/api/v1/client_applications.json", nil)
# => #<Net::HTTP::Get GET>  

ruby: main 
>> res = Net::HTTP.start([REDACTED]) {|http| http.request(req) }
# => #<Net::HTTPOK 200 OK readbody=true>  

ruby: main 
>> puts res.body
{"client_applications":[{"id":119059960,"name":"FooBar1","url":"http://test1.com"},{"id":504489040,"name":"FooBar2","url":"http://test2.com"}]}
# => nil  
Run Code Online (Sandbox Code Playgroud)

以下是我在控制器测试中所做的事情:

require 'oauth/client/action_controller_request'
describe …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails oauth 2-legged ruby-on-rails-3

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

什么是两条腿的Oauth

我一直在探索我目前正在开发的REST API的OAuth版本1.0.

我有3个身份验证方案

  1. 这涉及3方,服务提供商,消费者和用户.三脚Oauth符合这种情况.
  2. 涉及2方,消费者和服务提供者.这是一个双腿Oauth最适用的场景,如果是这样的话,这个过程是什么,因为基于我的理解,这与基本认证之间几乎没有区别.
  3. 我还创建了一种特殊类型的用户,可以在未经用户授权的情况下始终访问当前登录用户的数据.在实现OAuth的同时,这如何适应图片.

使用这种情况?我如何能够巧妙地实现Oauth,这又如何帮助我理解3腿和2腿的Oauth流程?

php api rest oauth 2-legged

5
推荐指数
1
解决办法
2066
查看次数

OAuth 1.0a,两条腿:如何安全地存储客户端的凭据(密钥/秘密)?

我是否正确地认为 OAuth 1.0a 凭据需要以明文形式存储在服务器上(或者以可以作为明文检索的方式)存储在服务器上,至少在进行 2 腿身份验证时?假设您使用的是 HTTPS 或其他 TLS,这不是比使用用户名和加盐 + 哈希密码安全性低得多吗?有没有一种方法可以存储这些凭据,以便安全漏洞不需要撤销所有凭据?


更详细地说:我正在实现一个 API,并希望使用 OAuth 1.0a 来保护它。未来可能会有许多不同的 API 客户端,但迄今为止唯一一个不需要敏感的用户数据,因此我计划使用“两条腿”OAuth。

据我了解,这意味着我为每个 API 客户端生成一个消费者密钥和一个共享密钥。对于每个 API 请求,客户端都会提供使用者密钥以及使用共享密钥生成的签名。秘密本身不是通过线路发送的,我绝对理解为什么这比直接发送用户名和密码更好。

然而,据我了解,消费者和提供者都必须显式存储消费者密钥和共享秘密(如果我错了,请纠正我),这似乎是一个主要的安全风险。如果攻击者破坏了包含消费者密钥和共享秘密的提供商的数据存储,则每个 API 客户端都将受到损害,重新保护系统的唯一方法就是撤销每个密钥。这与密码相反,密码(理想情况下)永远不会以可逆的方式存储在服务器上。如果您对密码进行加盐和散列处理,那么攻击者将无法仅通过破坏您的数据库来侵入任何帐户。

我所做的所有研究似乎只是通过说“像处理任何敏感数据一样保护凭证”来掩盖这个问题,但这似乎很荒谬。违规确实会发生,虽然它们可能会暴露敏感数据,但它们不应该允许攻击者冒充用户,对吗?

security authentication api oauth 2-legged

5
推荐指数
1
解决办法
940
查看次数

谷歌Drive api支持2腿oauth吗?

现在,我们有一个Google Docs Api和2 legged oauth的应用程序.但是,我们希望迁移到使用Oauth 2.0的Google Drive Api.

我们可以使用Google Drive Api的2腿oauth吗?有什么例子吗?

oauth 2-legged google-apps-marketplace google-drive-api

5
推荐指数
1
解决办法
1496
查看次数

使用google-api-java-client的2脚OAuth

有谁知道如何使用google-api-java-client使用2脚OAuth?我正在尝试访问Google Apps Provisioning API以获取特定域的用户列表.

以下不起作用

HttpTransport transport = GoogleTransport.create();
GoogleHeaders headers = (GoogleHeaders) transport.defaultHeaders;
headers.setApplicationName(APPLICATION_NAME);
headers.gdataVersion = GDATA_VERSION;

OAuthHmacSigner signer = new OAuthHmacSigner();
signer.clientSharedSecret = CONSUMER_SECRET;

OAuthParameters oauthParameters = new OAuthParameters();
oauthParameters.version = OAUTH_VERSION;
oauthParameters.consumerKey = CONSUMER_KEY;
oauthParameters.signer = signer;
oauthParameters.signRequestsUsingAuthorizationHeader(transport);
Run Code Online (Sandbox Code Playgroud)

我收到"com.google.api.client.http.HttpResponseException:401 Unknown authorization header".标题看起来像这样

OAuth oauth_consumer_key="...", oauth_nonce="...", oauth_signature="...", oauth_signature_method="HMAC-SHA1", oauth_timestamp="...", oauth_version="1.0"
Run Code Online (Sandbox Code Playgroud)

我也尝试过没有成功

GoogleOAuthDomainWideDelegation delegation = new GoogleOAuthDomainWideDelegation();
delegation.requestorId = REQUESTOR_ID;
delegation.signRequests(transport, oauthParameters);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?提前致谢.

java oauth google-api 2-legged google-api-java-client

4
推荐指数
1
解决办法
4531
查看次数