我有一个存储用户访问令牌的数据库(以及一些其他数据).我授权用户时,我的权限列表包括offline_access.
那么用户的访问令牌(客户端)是否始终与数据库中该用户的访问令牌相同?或者用户的访问令牌在注销,更改密码等时是否会发生变化?
我的客户公司为数千家小企业管理Facebook页面.我们构建了一个Facebook应用程序,供我们的客户简化流程,并允许他们一次快速地对多个/所有页面进行更改.
出于任何商业原因,我们的客户公司只为其中一个员工添加了管理员(以及小企业主)的每个页面.此用户帐户已添加我们的应用程序,我们正在抓取页面令牌并使用这些页面令牌来管理页面(更改联系信息,添加选项卡,获取墙上帖子).我们遇到了一些非常苛刻的api请求限制.现在我们每分钟只能添加3个新的Facebook页面(我认为这可能需要6-10次api调用才能完成所有操作).
我已经看到人们估计一个访问令牌允许大约600个请求/ 600秒,但我认为,由于我们使用页面令牌完成了大部分工作,因此我们的操作不会计入单个api限制.
有没有人知道api限制是否基于个人令牌,即使它们在技术上属于同一个用户?考虑到我无法真正为这些页面添加更多管理员,有什么方法可以绕过这个限制吗?
facebook-page facebook-graph-api access-token facebook-access-token
我使用以下内容来获取可以从Android应用程序访问后端的身份验证.这在此处描述https://developers.google.com/identity/protocols/CrossClientAuth.
StringBuffer sb = new StringBuffer();
sb.append("oauth2:server:client_id:");
sb.append(getString(R.string.google_app_id));
sb.append(":api_scope:");
sb.append("profile email");
final String scope = sb.toString();
String token = GoogleAuthUtil.getToken(Activity.this, mAuthAccount, scope);
Run Code Online (Sandbox Code Playgroud)
(之前使用AccountPicker.newChooseAccountIntent设置了mAuthAccount.)
以上内容返回有时已过期的短期认证代码.我想针对谷歌服务器进行检查,但使用GoogleAuthUtil.getToken返回的令牌字符串调用https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=会返回"无效令牌".
在尝试使用之前,如何验证身份验证代码是否已过期?
编辑:返回的字符串不是令牌,而是授权代码,可以与谷歌API交换以获取令牌(返回的字符串以"/ 4"开头,而不是"/ 1"或"/ 2",如果我记得的话正确).
代码并不总是有效(在我的服务器上),我希望能够检查代码是否可以使用或已过期.
我已经使用Laravel Passport文档成功创建了server.app和client.app.一切都按预期工作.
client.app路由:
Route::get('callback', function (Request $request) {
$http = new GuzzleHttp\Client;
$response = $http->post('http://server.app/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => 3,
'client_secret' => 'secret',
'redirect_uri' => 'http://client.app/callback',
'code' => $request->code
]
]);
return json_decode((string) $response->getBody(), true)['access_token'];
});
Run Code Online (Sandbox Code Playgroud)
默认情况下,此路由返回access_token,我可以使用它来执行任何操作.
请求:
http://server.app/oauth/authorize?client_id=3&redirect_uri=http%3A%2F%2Fclient.app%2Fcallback&response_type=code&scope=
Run Code Online (Sandbox Code Playgroud)
返回:
http://client.app/callback?code=access_token
Run Code Online (Sandbox Code Playgroud)
题:
如何使用client.app中给定的access_token 向server.app发出正确的请求以获取用户的电子邮件(s).
我应该使用: http://server.app/api/user请求获取数据?如果是的话,我怎么能这样做?如果可能,请写一个代码.
谢谢你的回答.
我正在使用谷歌日历API.这就是我想要的,一旦你给予应用程序许可,我总是可以使用该应用程序,而无需每天访问.我一直听说我需要保存访问令牌或使用刷新令牌来做我想做的事情.这就是问题,你是怎么做到的?代码如何?我已经尝试将令牌保存在cookie中,但一小时后,访问令牌已过期.如何让用户保持登录状态?
PS:请给我解释代码示例.
这是我的代码(使用CakePHP):
$client = new Google_Client();
$client->setApplicationName("Wanda3.0 Agenda");
$cal = new Google_CalendarService($client);
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
}
if (isset($_SESSION['token'])) { $client->setAccessToken($_SESSION['token']); }
if ($client->getAccessToken()) {
/************* Code entry *************/
}else{
/************* Not connected to google calendar code *************/
$authUrl = $client->createAuthUrl();
$returnArr = array('status' => 'false', 'message' => "<a class='login' href='$authUrl'>Connect Me!</a>");
return $returnArr;
}
Run Code Online (Sandbox Code Playgroud) 我有一个基于Web的应用程序,它使用Google OAuth2.0作为登录框架.直到昨天它还能很好地工作.访问令牌过期后,applcation无法获取刷新令牌.除此之外,"请求许可"页面已更改为"具有离线访问权限",而不是"知道您在Google上的身份"和"查看您的电子邮件"
最初,"请求许可"页面将要求访问"了解您在Google上的身份"和"查看您的电子邮件".用户注销并尝试第二次登录后,"请求权限"页面也是相同的.
但是,直到昨天,"请求权限"页面已更改为"具有脱机访问权限".访问令牌过期后,我得到了错误消息:
PHP致命错误:未捕获的异常'Google_AuthException',并显示消息'OAuth 2.0访问令牌已过期,并且刷新令牌不可用.对于自动批准的回复,不会返回刷新令牌.在/home2/xxxx/public_html/test/google-api-php-client/src/auth/Google_OAuth2.php:221
我试过了$client->setAccessType('online');.但是,我仍然遇到了这个致命的错误.以下是获取访问令牌的代码:
if ($client->getAccessToken()) {
$token = $client->getAccessToken();
$authObj = json_decode($token);
$refreshToken = $authObj->refresh_token;
$user = $oauth2->userinfo->get();
$me = $plus->people->get('me');
$email = filter_var($user['email'], FILTER_SANITIZE_EMAIL); // get the USER EMAIL ADDRESS using OAuth2
$optParams = array('maxResults' => 100);
$activities = $plus->activities->listActivities('me', 'public', $optParams);
$_SESSION['access_token'] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
}
Run Code Online (Sandbox Code Playgroud)
我试图像我一样搜索类似的问题,但我找不到一个.这发生在昨天以后.在此之前,我从未对代码做过任何更改.
我有一个与REST API服务器通信的Angular应用程序(SPA),我有兴趣找到存储从API服务器返回的访问令牌的最佳方法,以便Angular客户端可以使用它来验证未来的请求到API.出于安全原因,我想将其存储为浏览器会话变量,以便在关闭浏览器后不会保留令牌.
我正在使用资源所有者密码授权实现一个稍微定制的OAuth 2.0版本.Angular应用程序提供了一个表单,供用户输入其用户名和密码.然后将这些凭证发送到API以换取访问令牌,然后必须将其作为标头(授权:承载%令牌%)发送给API的所有出站请求,以便它可以授权对其他路由的请求.
我对Angular的领域还很陌生,但是我想在处理这些令牌时实现的工作流程总结如下.
1)客户端向API发出请求,为其提供用户凭据.
2)如果此请求成功,则令牌存储在某处(问题在哪里)
3)拦截HTTP请求.如果设置了token,则将其作为标头传递给API
4)浏览器/选项卡关闭时,令牌被销毁.
我知道Angular提供$ window.sessionStorage,这似乎是我正在寻找的,但我担心它根据我读过的各种资源不能在所有浏览器上工作.这是一个企业级应用程序,必须兼容各种浏览器(IE,Chrome,Firefox).我能安全地使用它,并确信它会稳定吗?
根据我的理解,替代方案是$ window.localStorage或cookies($ cookies,$ cookieStore).这对我来说不是一个理想的解决方案,因为我不希望这些数据持续存在,但如果这更可靠,我将不得不牺牲兼容性的效率.我也认为可以简单地将它设置为$ rootScope上的值并以这种方式引用它,但我不确定这是否可行.
我希望一切都有道理.任何帮助/建议将不胜感激.谢谢!
cookies session-storage local-storage access-token angularjs
我目前正在开发一个服务器和Django(1.7),它应该通过使用python-social-auth来处理社交网络的身份验证.我按照本网站上的教程进行操作,该教程描述了简单Web应用程序的过程.这适用于Google和Twitter登录.
由于服务器应该只是一个REST-FULL后端,我决定在客户端获取Access-Token并将其发送到服务器.服务器将通过它进行身份验证.这个过程应该没有问题,甚至在python-social-auth的文档中给出了一个例子.
但是,如果我确实设置了所有内容,我将收到一条错误消息:"后端未找到404".
这是项目的一个最小部分:
settings.py :(我还包括API_KEY和SECRET)
AUTHENTICATION_BACKENDS = (
#'social.backends.facebook.FacebookOAuth2',
'social.backends.google.GoogleOAuth2',
'social.backends.twitter.TwitterOAuth',
'django.contrib.auth.backends.ModelBackend',
)
Run Code Online (Sandbox Code Playgroud)
views.py(用于身份验证视图)
from django.contrib.auth import login
from social.apps.django_app.utils import psa
@psa('social:complete')
def register_by_access_token(request, backend):
token = request.GET.get('access_token')
user = request.backend.do_auth(request.GET.get('access_token'))
if user:
login(request, user)
return 'OK'
else:
return 'ERROR'
Run Code Online (Sandbox Code Playgroud)
我从文档中复制了海峡,只将backend.do_auth更改为request.backend.do_auth.这似乎是文档中的错误.
urls.py:
...
url(r'^register-by-token/(?P<backend>[^/]+)/$', 'register_by_access_token')
...
Run Code Online (Sandbox Code Playgroud)
也正如文档中所建议的那样.
我只是试图让这个只适用于google-oauth,因为有一个简单的js-lib可以为你提供访问令牌.这也很好,我发送请求
GET http://localhost:8000/register-by-token/google-oauth2/<access-token>/
Run Code Online (Sandbox Code Playgroud)
如上所述,返回是未找到的404后端.我做了一些调试,发现登录函数中引发的错误不是后端的do_auth()函数.因此,实际的身份验证过程有效.我还尝试使用随机生成的字符串作为令牌并得到相应的错误,用户无法进行身份验证.
有趣的是,用户甚至拥有一个属性后端,它可以保存"social.backends.google.GoogleOAuth2".
谢谢你,如果你和我一起留了很长的帖子,我希望有人知道可能出错的地方:).期待您的回答.
我正在研究该应用程序允许用户连接到linkedin(使用javascript).我想存储我从IN.ENV.auth.oauth_token获得的访问令牌,因为我将使用它来发布到用户的时间轴.
但是,当我使用此访问令牌发布到Linkedin时,我收到"无效访问令牌"错误.我使用了正确的访问令牌吗?如何获得Access令牌的正确方法?
这是我的代码:
$("#linkedin-connect").on('click',function(e){
e.preventDefault();
IN.UI.Authorize().place();
IN.Event.on(IN, "auth", OnLinkedInAuth);
return false;
});
function OnLinkedInAuth() {
console.debug("oauth token:" + IN.ENV.auth.oauth_token);
}
Run Code Online (Sandbox Code Playgroud)
我正在从 firebase 接收带有 APN 的通知的消息。在 Firebase 中,我有 APNs 密钥的证书,与从 Apple Developer 中提取的 Firebase 中的 Xcode 项目中具有相同的 id。
但我不知道为什么会发生这种情况,我收到此错误,它正在消息传递扩展中注册两个令牌:
extension AppDelegate : MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {}}
Run Code Online (Sandbox Code Playgroud)
在检索发件人 ID“########”的 FCM 令牌之前未设置 APNS 设备令牌。对此 FCM 令牌的通知将不会通过 APNS 传递。设置 APNS 设备令牌后,请务必重新检索 FCM 令牌。
添加了我在 AppDelegate 中的内容
import Firebase
import MasivPushIosSdk
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate{
var firebaseToken: String = ""
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
self.registerForFirebaseNotification(application: application)
Messaging.messaging().delegate = self
return …Run Code Online (Sandbox Code Playgroud) push-notification access-token ios firebase firebase-cloud-messaging
access-token ×10
oauth-2.0 ×2
php ×2
android ×1
angularjs ×1
cookies ×1
django ×1
facebook ×1
firebase ×1
google-api ×1
google-oauth ×1
ios ×1
javascript ×1
json ×1
laravel ×1
linkedin ×1
oauth ×1