这是使用新的(est)Facebook PHP SDK在Facebook平台上的画布应用程序.
我们使用Facebook教程中的PHP示例(https://developers.facebook.com/docs/appsonfacebook/tutorial/)来触发OAuth对话框并让测试用户进入重定向URL.
在重定向URL,我们使用Facebook签名请求文档页面(https://developers.facebook.com/docs/authentication/signed_request/)中的PHP示例,我们的测试用户可以成功授权该应用程序.
但是,在测试用户验证应用程序后,我们无法捕获访问令牌及其过期.我们可以在附加到重定向URL的地址栏中看到它,但它不会显示在$ _REQUEST数组中.如果我们将{$ access_token = $ facebook-> getAccessToken();}添加到重定向URL页面,它会显示访问令牌的值,但它显示的值不是我们单击Show时看到的完整令牌字符串"测试用户角色"页面中的令牌(我们认为它是测试用户的正确访问令牌).
以下是附加访问令牌的重定向URL示例:http: //karmakorn.com/karmakorn/alpha20/kk-fb-auth.php#access_token=126736467765%7C2.AQDavId8oL80P5t9.3600.1315522800.1-100002908746828%7CJICJwM1P_97tKmqkEO5pXDCf- 7Y&expires_in = 6008
以下是var_dump为同一页面的$ REQUEST数组显示的内容:array(3){[" _ qca"] => string(26)"P0-709927483-1291994912966"["_ _ spwitchTo5x"] => string(2)" 30"["PHPSESSID"] => string(26)"euois02ead39ijumca7nffblh2"}
我们不知道为什么$ _REQUEST数组与附加到URL的值不同,更重要的是 - 如何捕获访问令牌及其到期日期.
有人可以向我们展示一个工作示例,说明在重定向页面上运行parse_signed_request($ signed_request,$ secret)函数后如何捕获这些数据?谢谢!
附加信息:
以下是来自A)我们的测试索引页面的相关代码,以及B)我们的测试重定向页面.如果我们使用我们的文本索引页面作为重定向URL它会陷入无限循环 - 因为用户永远不会被识别.
A)索引页面
// Create kk-fb app instance
$facebook = new Facebook(array(
'appId' => KKFB_ID,
'secret' => KKFB_KY,
'oauth' => true,
));
$app_id = KKFB_ID;
$secret = KKFB_KY;
$canvas_auth = 'http://karmakorn.com/karmakorn/alpha20/kk-fb-auth.php';
$auth_url = "https://www.facebook.com/dialog/oauth?"
. "client_id=" . …Run Code Online (Sandbox Code Playgroud) 我试图通过Facebook API Graph Exlorer按照facebook的说明为我的应用程序请求authtoken .当我使用以下格式的URL进行get调用时:
https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
{
"error": {
"message": "Invalid callback",
"type": "OAuthException",
"code": 1
}
}
Run Code Online (Sandbox Code Playgroud)
关于如何获取我的应用程序的访问令牌的建议将不胜感激!
如果我尝试以编程方式运行以下代码来获取访问代码:
FB.api('/oauth/access_token?client_id={APP_ID}&client_secret={APP_SECRET}&grant_type=client_credentials', function(response) {
alert(JSON.stringify(response));
});
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
{"error":"load-error: unknown"}
Run Code Online (Sandbox Code Playgroud) 我正在尝试收集用户的数据,当他注册我的网站时.
我在提出请求时要求以下范围
<span id="signinButton">
<span
class="g-signin"
data-callback="signinCallback"
data-clientid="1085488274737.apps.googleusercontent.com"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/plus.login">
</span>
</span>
Run Code Online (Sandbox Code Playgroud)
然后,我首先尝试https://www.googleapis.com/oauth2/v1/userinfo?access_token=通过使用上一步中获得的访问令牌发出GET请求来获取用户的电子邮件ID和Google + ID .这完全没问题.它给了我用户的ID和电子邮件.
但是,如果我使用获得的ID和访问令牌来获取更多个人资料详细信息以及他圈子中的朋友,则无法使用.
https://www.googleapis.com/plus/v1/people/userID/?key=
Run Code Online (Sandbox Code Playgroud)
它表示无效密钥无效.
因此,我完全无能为力.提到数据范围有什么错误吗?
我想使用Instagram API在我自己的网站上显示我自己的内容.我可以在他们的文档中看到,当应用程序处于沙盒模式时,内容所有者可以在其网站上显示多达20个媒体.
我在我的帐户上创建了一个应用程序,我正在尝试使用他们的客户端隐式身份验证来生成一个access_token.
我点击此网址并登录我的帐户:
https://www.instagram.com/oauth/authorize/?client_id=MYCLIENTID&redirect_uri=www.mysite.com&response_type=token
当我提交登录表单时,我被带到Instagram 404页面,上面写着:
Sorry, this page isn't available. The link you followed may be broken, or the page may have been removed. Go back to Instagram.
我错过了什么?我甚至需要access_token吗?在去年11月他们改变他们的API之前,我能够client_id在我的请求中使用它.我想那不可能了?
在我的Azure AD应用程序中,我试图在下面的部分中检索访问令牌
AuthorizationCodeReceived = (context) =>
{
var code = context.Code;
ClientCredential credential = new ClientCredential(ClientId, appKey);
string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
AuthenticationContext authContext = new AuthenticationContext(Authority, new ADALTokenCache(signedInUserID));
AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(
code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceID);
return Task.FromResult(0);
},
Run Code Online (Sandbox Code Playgroud)
而我正在低于错误
{"AADSTS70002:错误验证凭证AADSTS50011:回复地址' https://开头本地主机:44301 / '不匹配回复地址' https://开头本地主机:44301 '请求授权代码时提供\ r \nTrace ID: fd34bd6b-37d5-4b66-85d0-657b27103049\r \n相关ID:ea970ddb-cab8-4949-b749-1b4a8d7b5a6b\r \n时间戳:2016-08-25 06:44:59Z"}
使用jwt.io验证我的Azure广告访问令牌时,我得到了无效签名。但是,我的ID令牌可以很好地验证!
在验证Azure广告访问令牌
和
https://nicksnettravels.builttoroam.com/post/2017/01/24/Verifying-Azure-Active-Directory-JWT-Tokens.aspx时,我已经看到并尝试了无效签名中建议的解决方案,
但是都不适合我的访问令牌。
访问和ID令牌是通过Adal.js生成的:
var endpoints = {
"https://graph.windows.net": "https://graph.windows.net"
};
var configOptions = {
tenant: "<ad>.onmicrosoft.com", // Optional by default, it sends common
clientId: "<app ID from azure portal>",
postLogoutRedirectUri: window.location.origin,
endpoints: endpoints,
}
window.authContext = new AuthenticationContext(configOptions);
Run Code Online (Sandbox Code Playgroud)
为什么我可以验证我的ID令牌,但不能验证我的访问令牌?
validation access-token oauth-2.0 azure-active-directory adal
在 opencart 中,我看到 URL 如下所示:
https://www.example.com/admin/index.php?route=common/dashboard&token=Ger45ZJMsdfSSDggHfghI4wcQzbD
这个令牌是我的会话 ID 吗?如果是,在 url 上传递会话 ID 是否安全(带或不带 ssl)?
我需要访问 Github GraphQL API,以便每 N 小时永久发出以下请求:
query($ids: [ID!]!) {
rateLimit {
cost
remaining
resetAt
}
nodes(ids: $ids) {
... on Repository {
milestones(last: 100) {
nodes {
issues(last: 100) {
nodes {
closedAt
closed
}
}
state
dueOn
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试更改 Azure AD 用户密码。
用户已经使用隐式流和库在SPA应用程序中进行了身份验证。adal
打电话时:
return await graphClient.Me.Request().UpdateAsync(new User
{
PasswordProfile = new PasswordProfile
{
Password = userPasswordModel.NewPassword,
ForceChangePasswordNextSignIn = false
},
});
Run Code Online (Sandbox Code Playgroud)
我收到此异常:
{"代码:Request_ResourceNotFound\r\n消息:资源“35239a3d-67e3-4560-920a-2e9ce027aeab”不存在或其查询的引用属性对象之一不存在。\r\n\r\n内部错误\r\ n"}
调试我得到的访问令牌,Microsoft Client SDK我看到这个GUID指的是oid和sub属性。见下文:
这是我用来获取令牌的代码:
IConfidentialClientApplication clientApp =
ConfidentialClientApplicationBuilder.Create(Startup.clientId)
.WithAuthority(string.Format(AuthorityFormat, Startup.tenant))
.WithRedirectUri(Startup.redirectUri)
.WithClientSecret(Startup.clientSecret)
.Build();
var authResult = await clientApp.AcquireTokenForClient(new[] { MSGraphScope }).ExecuteAsync();
return authResult.AccessToken;
Run Code Online (Sandbox Code Playgroud)
我在SPA应用程序中使用隐式流。在这样做时,我看到我的用户已通过身份验证并且所有声明都存在。ClaimsPrincipal.Current
我在 GitHub 和 Microsoft Docs 上阅读了很多文档,但我仍然不清楚如何实现这一点。顺便说一下,我正在使用这些 Microsoft Graph 包:
<package id="Microsoft.Graph" …Run Code Online (Sandbox Code Playgroud) authentication change-password access-token microsoft-graph-sdks microsoft-graph-api
(问题的继续:为什么我的 SPA 正在使用 Azure Active Directory 调用我的 WebAPI,收到“此请求的授权已被拒绝。”?)
我的客户端 SPA 正在尝试调用受保护的 WebAPI(服务)。客户端使用 MSAL(Micosoft 身份验证库)。问题发生在调用 API 之前,即在下图中的 1 和 2 之间。
这是客户
<!DOCTYPE html>
<html>
<head>
<title>Quickstart for MSAL JS</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.4/bluebird.min.js"></script>
<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.2/js/msal.js"></script>
</head>
<body>
<div class="container">
<div>
<button id="GetTodos" onclick="getTodos()">Get Todos</button>
</div>
</div>
<script>
var msalConfig = {
auth: {
clientId: 'xxxxxxxxxxxxxxxxxxxxxxx2427',
authority: "https://login.microsoftonline.com/my.tenant"
},
cache: {
cacheLocation: "sessionStorage",
storeAuthStateInCookie: true
}
};
var requestObj = {
// scopes: ["user.read"]
scopes: ["access_as_user"]
};
var myMSALObj = new …Run Code Online (Sandbox Code Playgroud) azure access-token single-page-application azure-active-directory azure-ad-msal
access-token ×10
get ×2
oauth-2.0 ×2
token ×2
adal ×1
azure ×1
github ×1
github-api ×1
google-plus ×1
instagram ×1
login ×1
opencart ×1
php ×1
url ×1
validation ×1