任何人都可以指出一个完整的示例,使用OAuth2和Flask对Google帐户进行身份验证,而不是在App Engine上进行身份验证吗?
我正在尝试让用户访问Google日历,然后使用该访问权限从日历中检索信息并进一步处理.我还需要存储并稍后刷新OAuth2令牌.
我查看了Google的oauth2client库,可以开始检索授权代码,但是我有点迷失了.查看Google的OAuth 2.0 Playground我知道我需要请求刷新令牌和访问令牌,但库中提供的示例仅适用于App Engine和Django.
我也尝试使用Flask的OAuth模块,其中包含对OAuth2的引用,但我也没有看到任何方式在那里交换授权代码.
我可以手动编写请求代码,但更愿意使用或改编现有的python模块,使请求变得简单,正确处理可能的响应,甚至可以帮助存储令牌.
有这样的事吗?
我正在寻找一个帮助我构建OAuth提供程序的Java库.我必须能够接收OAuth签名请求并确定它们是否有效(检查签名,时间戳和现时值).
你知道是否有什么能让这项工作更容易吗?
我正在使用我自己的个人Google帐户玩Google的OAuth 2.0 Playground,但我似乎无法使用游乐场恢复我的Gmail地址.
我使用的范围是:
email profile https://www.googleapis.com/auth/plus.login
但是当我调用API时:
https://www.googleapis.com/oauth2/v2/userinfo
我得到有关用户的各种信息,如姓氏,名字,性别,图片等,但它不会返回用户的电子邮件.
如何检索用户的电子邮件地址?我是否有错误的范围或我是否使用了错误的API?我觉得这应该很简单,但我确实试图解决这个问题几个小时,我找不到一直提供用户电子邮件地址的API和范围组合.
我尝试发布sereval范围值,以允许我的应用程序的一些谷歌服务...
我尝试了两个输入字段
<input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar" />  
<input type="hidden" name="scope" value="https://www.googleapis.com/auth/userinfo.email" />
并带有一个带+分隔符的输入字段
<input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar+https://www.googleapis.com/auth/userinfo.email" />  
当我发送只有一个范围的表单时它工作.否则与sereval范围值谷歌重定向我与此错误描述:
http://localhost:49972/redirect.aspx#error=invalid_request&error_description=OAuth+2+parameters+can+only+have+a+single+value:+scope&error_uri=http://code.google.com/apis/accounts/docs/OAuth2.html 
在google 开始使用oAuth2时,它可以使用两个范围值.
这是我的代码:
  <form id="form1" method="post" action="https://accounts.google.com/o/oauth2/auth?" >
    <div>
        <input type="hidden" name="response_type" value="code" />
        <input type="hidden" name="client_id" value="my client id" />
        <input type="hidden" name="redirect_uri" value="http://localhost:49972/redirect.aspx" />
        <input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar" />
        <input type="hidden" name="scope" value="https://www.googleapis.com/auth/userinfo.email" />
        <input type="hidden" name="state" value="/profile" />
        <input type="submit" value="go" />
    </div>
    </form>
我认为OAuth基本上是基于令牌的身份验证规范,但大多数时候框架的行为就像它们之间存在差异一样.例如,如下图所示,Jhipster会询问是使用基于OAuth还是基于令牌的身份验证.
这些不一样吗?究竟有什么区别,因为它们的实现中都包含令牌?
我正试图通过Gmails OAuth 2.0访问用户的邮件,我正在通过Google的OAuth 2.0 Playground来解决这个问题
在这里,他们已经指定我需要将其作为HTTP REQUEST发送:
POST /mail/feed/atom/ HTTP/1.1
Host: mail.google.com
Content-length: 0
Content-type: application/json
Authorization: OAuth SomeHugeOAuthaccess_tokenThatIReceivedAsAString
我已经尝试编写代码来发送此REQUEST,如下所示:
$crl = curl_init();
$header[] = 'Content-length: 0 
Content-type: application/json';
curl_setopt($crl, CURLOPT_HTTPHEADER, $header);
curl_setopt($crl, CURLOPT_POST,       true);
curl_setopt($crl, CURLOPT_POSTFIELDS, urlencode($accesstoken));
$rest = curl_exec($crl);
print_r($rest);
不工作,请帮忙.:)
更新:我接受了Jason McCreary的建议,现在我的代码看起来像这样:
$crl = curl_init();
$headr = array();
$headr[] = 'Content-length: 0';
$headr[] = 'Content-type: application/json';
$headr[] = 'Authorization: OAuth '.$accesstoken;
curl_setopt($crl, CURLOPT_HTTPHEADER,$headr);
curl_setopt($crl, CURLOPT_POST,true);
$rest = curl_exec($crl);
curl_close($crl);
print_r($rest);
但我没有得到任何输出.我认为cURL在某个地方默默地失败了.请帮忙.:)
更新2: NomikOS的伎俩为我做了.:) …
我正在寻找通过 Java中的Oauth实现一个获得Twitter授权的应用程序.第一步是获取请求令牌.这是app引擎的Python示例.
为了测试我的代码,我正在运行Python并使用Java检查输出.以下是Python生成基于哈希的消息验证代码(HMAC)的示例:
#!/usr/bin/python
from hashlib import sha1
from hmac import new as hmac
key = "qnscAdgRlkIhAUPY44oiexBKtQbGY0orf7OV1I50"
message = "foo"
print "%s" % hmac(key, message, sha1).digest().encode('base64')[:-1]
输出:
$ ./foo.py
+3h2gpjf4xcynjCGU5lbdMBwGOc=
如何在Java中复制此示例?
try {
    // Generate a key for the HMAC-MD5 keyed-hashing algorithm; see RFC 2104
    // In practice, you would save this key.
    KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");
    SecretKey key = keyGen.generateKey();
    // Create a MAC object …我打算将应用程序从旧的OAuth流程切换SFSafariViewController到iOS 11的新流程SFAuthenticationSession.登录不是问题,转移到新API花了我几分钟来实现.然而,退出让我感到困惑.
怎么样?
我找不到任何想提供在文档中任何地方注销的选项.使用旧的SFSafariViewController来使cookie无效?不,他们不再共享了SFAuthenticationSession.一旦我重新启动身份验证会话,用户就会自动登录并且没有任何出路.那么如何启用退出?或者我只是忽略了一些完全明显的东西?
更新:我从技术意义上找到了一种"有效的方式",但它对用户来说是疯狂的:在注销页面上打开一个新的SFAuthenticationSession来清除cookie.但这意味着当注销警报视图时再次询问用户他是否想通过该服务登录.如果是选择了("登录"),该cookie清算注销页面被打开时,用户必须手动关闭该视图,可以通过完成处理程序捕获,我们知道我们可以再次打开登录查看..显示登录提示退出?我真的不喜欢这个解决方案.
有任何想法吗?我还在忽视一个完全明显的解决方案吗?
更新2:由于到目前为止没有人对这个问题有任何线索,这可能不是一件容易的事.我已经通过他们的报告工具向Apple提出了一个建议,要么澄清如何处理这个问题,要么将其构建到API中(如果不可用).如果我得到答案,将发布.
更新3:在仔细思考问题之后,如果您可以影响OAuth提供程序的登录页面,我们会发现另一种可能的(虽然也没有吸引力)解决方案:使cookie非常短暂.然后可以在不自动登录的情况下打开登录页面.但是这会破坏在应用程序之间共享登录会话的全部目的..并且您需要能够影响登录页面.
更新4:因为iOS 12 SFAuthenticationSession已被弃用并被替换为ASWebAuthenticationSession.但是ASWebAuthenticationSession,在注销方面没有任何改变.它仍然不可能.和以前一样的问题.
我正在尝试为我的Angular App编写登录解决方案,
这意味着允许用户通过Facebok/Google/Twitter或正常注册进行连接.
我发现Angular-OAuth很有用,但它似乎不适用于Facebook(或Twitter).
有人知道这个全包解决方案吗?
是否可以在HTTP消息中包含多个授权标头?具体来说,我想包括一个承载令牌类型(传递OAuth访问令牌)和一个基本类型(传递base64编码的用户名:密码).
GET /presence/alice HTTP/1.1 
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Authorization: Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk
我认为没有理由这是不可能的,只是想与社区一起审查以确定.