我正在使用OAuth2.0在PHP中设计API。我的最终目标是用javascript(使用AngularJS)构建可直接访问此API的前端应用程序。我知道,传统上无法用javascript保护交易,因此直接访问API是不可行的。前端需要与服务器代码进行通信,而服务器代码又直接与API进行通信。但是,在研究OAuth2时,似乎好像是在设计User- Agent Flow来帮助解决这种情况。
我需要帮助的是在javascript中实现OAuth2用户代理流程(如果可能的话,尤其是AngularJS,因为这是我在前端使用的功能)。我还没有找到执行此操作的任何示例或教程。我真的不知道从哪里开始,也不想通读整个OAuth2规范,而至少没有看到我将要做的事情的示例。因此,任何示例,教程,链接等都将不胜感激。
该隐格兰特流(你指的是作为一个 用户代理流量 )正好是要走的路:
隐式授权是简化的授权代码流程,该流程针对使用脚本语言(例如JavaScript)在浏览器中实现的客户端进行了优化。
要了解流程,Google的客户端应用程序文档是一个很好的起点。请注意,他们建议您采取额外的 令牌验证 步骤,以避免混淆的代理问题。
<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>
要使用AngularJS 发送XMLHttpRequests(该ajax()函数在jQuery中的功能),请参阅其$http服务文档。
ajax()
$http
如果要保留状态,则在将用户发送到授权端点时,请签出该state参数。
state