Есть два клиента, которых я хочу авторизовать с помощью моего django-сервера.Оба позволяют Google войти в систему.
В Swift я могу добавить как clientID
, так и serverClientID
, а затем я получаю код авторизации:
extension AppDelegate: GIDSignInDelegate {
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!,
withError error: Error!) {
if not let error = error {
else {
if let code = user.serverAuthCode {
RESTService.request(to: "user/google_login", via: .post, with: [
"code": code
], { json in
print(json)
}
}
}
}
}
/api/user/google_login
- этопсевдоним для django-rest-social-auth /api/login/social/session/
с уже установленным провайдером.
Это отлично работает.Пользователь вошел в систему, все довольны.
На веб-клиенте, однако, я не смог найти опцию для добавления ключа сервера (в документации ).И если я просто использую ключ веб-клиента, авторизация сервера завершится неудачно:
`
401 Client Error: Unauthorized for url: https://accounts.google.com/o/oauth2/token
Your credentials aren't allowed
`
Реализация веб-клиента отражает код Swift:
function renderButton() {
gapi.load('auth2', function () {
auth2 = gapi.auth2.init({
client_id: CLIENT_ID,
// I tried specifying `server_id: SERVER_ID,` but that didnt change anything
});
$(document).on('click', '#my-signin2', function () {
auth2.grantOfflineAccess().then(signInCallback);
});
});
}
function signInCallback(authResult) {
if (authResult['code']) {
// Logged into your app and Google.
postJSON("/api/user/google_login/", {
"code": authResult['code']
}, postReload);
} else {
// There was an error.
}
}
Выполняется сообщение JSON, и сервер выполняетсязавершается с указанной выше ошибкой и возвращает 400
.
Я полагаю, это потому, что запрос от клиента не включает ключ сервера.Поэтому, когда сервер вызывает API Google для получения токена, он отклоняется, потому что ключ неизвестен.
Как я могу выполнить действительный запрос (как в Swift) от JS?