gpt4 book ai didi

javascript - 如何在 Javascript 中实现安全的 OAuth2 消费?

转载 作者:IT王子 更新时间:2023-10-29 03:04:38 25 4
gpt4 key购买 nike

我正在用 PHP 设计一个将使用 OAuth2.0 的 API。我的最终目标是用 javascript(使用 AngularJS)构建一个直接访问此 API 的前端应用程序。我知道传统上没有办法保护 javascript 中的事务,因此直接访问 API 是不可行的。前端需要与服务器代码通信,而服务器代码又直接与 API 通信。然而,在研究 OAuth2 时,用户代理流程似乎旨在帮助解决这种情况。

我需要帮助的是在 javascript 中实现 OAuth2 用户代理流程(如果可能,尤其是 AngularJS,因为这是我在前端使用的)。我一直无法找到执行此操作的任何示例或教程。我真的不知道从哪里开始,也不想通读整个 OAuth2 规范而不至少看一个我将要做的事情的例子。因此,我们将不胜感激任何示例、教程、链接等。

最佳答案

Implicit Grant flow (您称为 User-Agent Flow 的那个)正是要走的路:

The implicit grant is a simplified authorization code flow optimized for clients implemented in a browser using a scripting language such as JavaScript.

要了解流程,Google 的文档 client-side applications是一个很好的起点。请注意,他们建议您采取额外的 token 验证步骤以避免 confused deputy problems .

这是使用 Soundcloud API 和 jQuery 实现流程的一个简短示例,摘自 this answer :

<script type="text/javascript" charset="utf-8">
$(function () {
var extractToken = function(hash) {
var match = hash.match(/access_token=([\w-]+)/);
return !!match && match[1];
};

var CLIENT_ID = YOUR_CLIENT_ID;
var AUTHORIZATION_ENDPOINT = "https://soundcloud.com/connect";
var RESOURCE_ENDPOINT = "https://api.soundcloud.com/me";

var token = extractToken(document.location.hash);
if (token) {
$('div.authenticated').show();

$('span.token').text(token);

$.ajax({
url: RESOURCE_ENDPOINT
, beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', "OAuth " + token);
xhr.setRequestHeader('Accept', "application/json");
}
, success: function (response) {
var container = $('span.user');
if (response) {
container.text(response.username);
} else {
container.text("An error occurred.");
}
}
});
} else {
$('div.authenticate').show();

var authUrl = AUTHORIZATION_ENDPOINT +
"?response_type=token" +
"&client_id=" + clientId +
"&redirect_uri=" + window.location;

$("a.connect").attr("href", authUrl);
}
});
</script>
<style>
.hidden {
display: none;
}
</style>

<div class="authenticate hidden">
<a class="connect" href="">Connect</a>
</div>

<div class="authenticated hidden">
<p>
You are using token
<span class="token">[no token]</span>.
</p>

<p>
Your SoundCloud username is
<span class="user">[no username]</span>.
</p>
</div>

用于发送XMLHttpRequests (ajax() 函数在 jQuery 中的作用)使用 AngularJS,请参阅其关于 $http service 的文档.

如果您想保留状态,将用户发送到授权端点时,请检查 state参数。

关于javascript - 如何在 Javascript 中实现安全的 OAuth2 消费?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11440398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com