/ / Клиентска тайна + освежаване на маркера за достъп в пролет oauth2 - пролет, пролет-сигурност, oauth-2.0, spring-oauth2

Клиентска тайна + освежаване на токена за достъп през пролетта oauth2 - пролет, пролет-сигурност, oauth-2.0, spring-oauth2

Използвам пролетно зареждане за бекенд и Android устройство за фронта на моята система. В момента съм изправен пред предизвикателството да използвам Spring-OAuth2, за да защитя моя ресурсен сървър.
Имам някои въпроси, които искам да обсъдя с вас:
Моите знания + този урок казват, че трябва да използвам типа за предоставяне на парола OAuth2.0 за парола за мобилното си приложение, за да получа знак за достъп. Официалният пролетен урок за сигурност дава пример как да получите маркера за достъп с помощта на типа на предоставяне на парола:

$ curl client:secret@localhost:8080/oauth/token -d grant_type=password -d username=user -d password=pwd

И тук идва първият ми въпрос: Има ли възможност за получаване на маркер за достъп с помощта на типа на предоставяне на парола, без да се изпраща „клиентска тайна“?
Тъй като клиентската тайна може да бъде „обратнапроектиран "чрез декомпилиране на клиентското приложение. Получаването на маркер за достъп без тайна трябва да бъде някак възможно, защото Facebook SDK за Android също не се нуждае от client_secret в мобилното приложение.
Мисля, че тук имам малко проблемиразбиране защо clientID + clientSecret трябва да бъде включен в заявката по-горе, тъй като, тъй като вече са включени потребителско име + парола, трябва да е възможно да се генерира токен за достъп, така че това носи следващо ниво на сигурност? и означава ли това следното (пример): Влизам като Filip в моя клиент за Android и изпращам маркера за достъп A с всяка заявка до сървъра. След това влизам като Филип в уеб клиент и се опитвам да осъществя достъп до сървъра за ресурси от уеб клиента, използвайки маркера за достъп A, което не е възможно, тъй като маркер за достъп A е издаден само за клиент с Android?

Следващият въпрос е как мога да опресня получения маркер за достъп?
Опитвах се да го направя с помощта на командата по-долу,но получих „За достъп до този ресурс е необходимо пълно удостоверяване.“ След като получих новия освежен маркер, мога ли да използвам токът за опресняване, за да освежа отново новия си маркер за достъп?

curl -v --data "grant_type=refresh_token&client_id=acme&client_secret=acmesecret&refresh_token=REFRESH_TOKEN" http://localhost:9999/uaa/oauth/token

Благодаря ти

Отговори:

0 за отговор № 1

OAuth 2.0 spec дава възможност за т. Нар. Публични клиенти, т.е. клиенти, които не се удостоверяват. Така че е възможно да се използва предоставяне на идентификационни данни за парола на собственик на ресурс с публичен клиент, т.е. че сървърът за упълномощаване не може да приеме нищо за клиента, тъй като client_id не е тайна и няма начин да предотврати злонамерен клиент, използващ този тип безвъзмездна помощ, или клиенти да се представят взаимно. Така че използването му по този начин идва с цената на намалена сигурност, въпреки че може да се твърди, че във вашия случай няма начин да използвате поверителни клиенти по никакъв начин, така че няма разлика.

По принцип отпускането на удостоверения за парола на собственика на ресурс е анти-образец за OAuth и предназначен само за миграционни цели, тъй като той побеждава повечето от целите на OAuth сам по себе си.

Токените за достъп се издават на база клиент.

Опресняване на заявката за токен изглежда добре, ноСървърът за упълномощаване може да изисква основно удостоверяване, вместо да предоставя client_id / client_secret като параметри на публикацията, като се има предвид, че сте направили същото за първоначалната заявка на маркер за достъп.