VK.vom 的浏览器中可能存在隐式 OAuth 2.0 授权流程?
Implicit OAuth 2.0 Grant Flow possible in Browser for VK.vom?
我正在试用 VK.com 的 API,但对他们处理身份验证的方式有疑问。
要访问我需要的资源,我的应用程序必须是 "standalone app",只允许隐式 OAuth 授权流程,重定向到 vk.com/blank.html.
所以从服务器端流程我无法访问最后附加到其 URL 的令牌。显然,这可以在(移动)设备上运行,我可以在其中访问较低级别的浏览器,但我有点迷失了弄清楚它如何从独立的(或没有,我有后端)browser/JS 应用程序运行。或者是否有可能?
到目前为止,我发现的唯一信息总是使用直接用户凭据,而我没有 have/want。我只需要访问附加到重定向到 vk.com/blank.html 的 url 的最终代码,这样我就可以使用它通过后端获取访问令牌(没有 client_secret 在浏览器中)。
您可以在回调 URL 上提供 Javascript,从 URL 的片段中提取 access_token 并将其 POST 发送到您的服务器后端。 OpenID Connect 规范中有执行此操作的示例代码,请参阅 http://openid.net/specs/openid-connect-core-1_0.html#FragmentNotes.
这是另一个使用 HTML 表单而不是 AJAX 调用的示例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
function postOnLoad() {
encoded = location.hash.substring(1).split('&');
for (i = 0; i < encoded.length; i++) {
encoded[i].replace(/\+/g, " ");
var n = encoded[i].indexOf("=");
var input = document.createElement("input");
input.type = "hidden";
input.name = decodeURIComponent(encoded[i].substring(0, n));
input.value = decodeURIComponent(encoded[i].substring(n+1));
document.forms[0].appendChild(input);
}
document.forms[0].action = window.location.href.substr(0, window.location.href.indexOf('#'));
document.forms[0].submit();
}
</script>
<title>Submitting...</title>
</head>
<body onload="postOnLoad()">
<p>Submitting...</p>
<form method="post" action=""><p><input type="hidden" name="response_mode" value="fragment"></p></form>
</body>
</html>
我正在试用 VK.com 的 API,但对他们处理身份验证的方式有疑问。
要访问我需要的资源,我的应用程序必须是 "standalone app",只允许隐式 OAuth 授权流程,重定向到 vk.com/blank.html.
所以从服务器端流程我无法访问最后附加到其 URL 的令牌。显然,这可以在(移动)设备上运行,我可以在其中访问较低级别的浏览器,但我有点迷失了弄清楚它如何从独立的(或没有,我有后端)browser/JS 应用程序运行。或者是否有可能? 到目前为止,我发现的唯一信息总是使用直接用户凭据,而我没有 have/want。我只需要访问附加到重定向到 vk.com/blank.html 的 url 的最终代码,这样我就可以使用它通过后端获取访问令牌(没有 client_secret 在浏览器中)。
您可以在回调 URL 上提供 Javascript,从 URL 的片段中提取 access_token 并将其 POST 发送到您的服务器后端。 OpenID Connect 规范中有执行此操作的示例代码,请参阅 http://openid.net/specs/openid-connect-core-1_0.html#FragmentNotes.
这是另一个使用 HTML 表单而不是 AJAX 调用的示例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
function postOnLoad() {
encoded = location.hash.substring(1).split('&');
for (i = 0; i < encoded.length; i++) {
encoded[i].replace(/\+/g, " ");
var n = encoded[i].indexOf("=");
var input = document.createElement("input");
input.type = "hidden";
input.name = decodeURIComponent(encoded[i].substring(0, n));
input.value = decodeURIComponent(encoded[i].substring(n+1));
document.forms[0].appendChild(input);
}
document.forms[0].action = window.location.href.substr(0, window.location.href.indexOf('#'));
document.forms[0].submit();
}
</script>
<title>Submitting...</title>
</head>
<body onload="postOnLoad()">
<p>Submitting...</p>
<form method="post" action=""><p><input type="hidden" name="response_mode" value="fragment"></p></form>
</body>
</html>