Ответ 1
Неявный поток грантов (тот, который вы называете потоком User-Agent) - это именно то, что нужно сделать:
Неявное предоставление - это упрощенный поток кода авторизации, оптимизированный для клиентов, реализованных в браузере, с использованием языка сценариев, такого как JavaScript.
Чтобы понять поток, документация из Google для клиентских приложений - это действительно хорошее место для начала. Обратите внимание, что они рекомендуют вам выполнить дополнительный шаг проверки маркера, чтобы избежать запутанных проблемных вопросов.
Вот краткий пример реализации потока с использованием Soundcloud API и jQuery, взятых из этого ответа:
<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
сервис.
Если вы хотите сохранить состояние, при отправке пользователя в конечную точку авторизации, проверьте параметр state
.