OAuth 2.0协议草案的4.2节指出授权服务器可以返回a access_token(用于向资源验证自己)以及a refresh_token,它纯粹用于创建新的access_token:
https://tools.ietf.org/html/rfc6749#section-4.2
为什么两者都有?为什么不只是做到access_token最后只要refresh_token没有refresh_token?
我想从Google获取访问令牌. Google API说要获取访问令牌,请将代码和其他参数发送到令牌生成页面,响应将是一个JSON对象,如:
{
"access_token" : "ya29.AHES6ZTtm7SuokEB-RGtbBty9IIlNiP9-eNMMQKtXdMP3sfjL1Fc",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/HKSmLFXzqP0leUihZp2xUt3-5wkU7Gmu2Os_eBnzw74"
}
Run Code Online (Sandbox Code Playgroud)
但是,我没有收到刷新令牌.我的回答是:
{
"access_token" : "ya29.sddsdsdsdsds_h9v_nF0IR7XcwDK8XFB2EbvtxmgvB-4oZ8oU",
"token_type" : "Bearer",
"expires_in" : 3600
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用JWT为我的RESTful API实现无状态身份验证.
AFAIK,JWT基本上是在REST调用期间作为HTTP头传递的加密字符串.
但是,如果有一个窃听者看到了请求并窃取了令牌呢?那么他能用我的身份伪造请求吗?
实际上,这种关注适用于所有基于令牌的身份验证.
怎么预防?像HTTPS这样的安全渠道?
我正在使用ASP.NET Core应用程序.我正在尝试实现基于令牌的身份验证,但无法弄清楚如何在我的情况下使用新的安全系统.我经历了一些例子,但他们对我没什么帮助,他们使用的是cookie身份验证或外部身份验证(GitHub,Microsoft,Twitter).
我的场景是什么:angularjs应用程序应该请求/tokenurl传递用户名和密码.WebApi应授权用户并返回access_tokenangularjs app在以下请求中使用的内容.
我找到了很好的文章,关于在当前版本的ASP.NET中实现我所需要的 - 使用ASP.NET Web API 2,Owin和Identity进行基于令牌的身份验证.但对我来说,如何在ASP.NET Core中做同样的事情并不明显.
我的问题是:如何配置ASP.NET Core WebApi应用程序以使用基于令牌的身份验证?
我有一个Facebook页面,我想从中获取一些东西.第一件事是提要,从我读到的它们是公开的(不需要access_token).但是我也希望得到这些事件......它们不是公开的,需要access_token.
我不希望用户登录Facebook或类似的东西.我只是想从这个唯一的页面推送所有数据.这就是为什么我已经放弃了我在这里找到的许多例子以及https://developers.facebook.com/blog/post/500/上的例子,因为他们希望用户登录或需要一些用户操作我并不感兴趣.
我想要的是我的Facebook应用程序具有完全授权和access_token来推送我拥有的这个Facebook页面(管理员)的数据.这可能吗?我已经尝试了很多东西但似乎没什么用.
我试着点击这个:https://www.facebook.com/dialog/oauth? client_id = 150635421702954 & redirect_uri = http : //MY_URL/& scope = manage_pages & response_type = token & fields = access_token - 将MY_URL更改为我的网站,并请求授权编辑每个我拥有的页面.甚至不是我想要的我点击但没有access_token作为回报...
facebook oauth facebook-page facebook-graph-api access-token
我目前正在开发一个REST-API,它为开发环境提供HTTP-Basic保护.由于真正的身份验证是通过令牌完成的,我仍然试图找出,如何发送两个授权头.
我试过这个:
curl -i http://dev.myapp.com/api/users \
-H "Authorization: Basic Ym9zY236Ym9zY28=" \
-H "Authorization: Bearer mytoken123"
Run Code Online (Sandbox Code Playgroud)
我可以为我的IP禁用HTTP身份验证,但由于我通常在具有动态IP的不同环境中工作,这不是一个好的解决方案.我错过了什么吗?
rest curl restful-authentication basic-authentication access-token
我在短时间内多次使用刷新令牌进行测试,但我不知道,Google刷新令牌会过期吗?或者我可以调用相同的刷新令牌以在很长一段时间(一周甚至几个月)内反复获取另一个访问令牌?
我一直在使用Google AnalyticsAPI(V3)并遇到了som错误.首先,一切都设置正确,并与我的测试帐户一起使用.但是,当我想从其他个人资料ID(相同的Google Accont/GA帐户)中获取数据时,我收到403错误.奇怪的是,来自某些GA帐户的数据将返回数据,而其他帐户会生成此错误.
我已经撤销了令牌并再次进行了身份验证,现在看来我可以从我的所有帐户中获取数据.问题解决了?不.由于访问密钥将过期,我将再次遇到同样的问题.
如果我理解正确,可以使用resfreshToken来获取新的authenticationTooken.
问题是,当我跑:
$client->refreshToken(refresh_token_key)
Run Code Online (Sandbox Code Playgroud)
返回以下错误:
Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }'
Run Code Online (Sandbox Code Playgroud)
我检查了refreshToken方法背后的代码,并将请求追溯回"apiOAuth2.php"文件.所有参数都正确发送.grant_type在方法中被硬编码为'refresh_token',所以我很难理解什么是错的.参数数组如下所示:
Array ( [client_id] => *******-uqgau8uo1l96bd09eurdub26c9ftr2io.apps.googleusercontent.com [client_secret] => ******** [refresh_token] => 1\/lov250YQTMCC9LRQbE6yMv-FiX_Offo79UXimV8kvwY [grant_type] => refresh_token )
Run Code Online (Sandbox Code Playgroud)
程序如下.
$client = new apiClient();
$client->setClientId($config['oauth2_client_id']);
$client->setClientSecret($config['oauth2_client_secret']);
$client->setRedirectUri($config['oauth2_redirect_uri']);
$client->setScopes('https://www.googleapis.com/auth/analytics.readonly');
$client->setState('offline');
$client->setAccessToken($config['token']); // The access JSON object.
$client->refreshToken($config['refreshToken']); // Will return error here
Run Code Online (Sandbox Code Playgroud)
这是一个错误,还是我完全误解了什么?
我无法使用我的代码获取刷新令牌.我只能获得我的访问令牌,令牌类型等,我已经按照一些教程,比如access_type=offline输入我的登录URL:
echo "<a href='https://accounts.google.com/o/oauth2/auth?"
. "access_type=offline&client_id=123345555.apps.googleusercontent.com& "
. "scope=https://www.googleapis.com/auth/calendar+https://www.googleapis.com/auth/plus.me&response_type=code& "
. "redirect_uri=http://www.sample.com/sample.php&state=/profile'>Google</a>";
Run Code Online (Sandbox Code Playgroud)
以及我获取访问令牌的字段:
$fields=array(
'code'=> urlencode($authcode),
'client_id'=> urlencode($clientid),
'client_secret'=> urlencode($clientsecret),
'redirect_uri'=> urlencode($redirecturi),
'grant_type'=> 'authorization_code',
);
Run Code Online (Sandbox Code Playgroud)
但是我无法获得refresh_token,只有access_token,token_type,id_token和expires_in.
我正在构建一个应用程序,允许用户管理他们的Facebook粉丝页面.这需要以下两个访问令牌:
我对用户访问令牌非常熟悉,但对页面访问令牌却不熟悉.
有人知道页面访问令牌保持有效的时间吗?我在Facebook网站上找到的就是这个简洁的段落,它没有提到任何有关它到期的内容.
我是否可以假设,如果我使用权限请求用户访问令牌,则offline_access页面访问令牌也将无限期地持续(除非用户更改其密码或手动取消授权我的应用程序)?
我问,因为我想知道我应该多久查询一次Facebook Graph API并获取页面访问令牌.我应该在用户注册时简单地请求一次吗?或者,如果他们不断更改,我应该为每个API调用请求一个吗?后者显然更加沉重!