/ / Segredo do cliente + atualizando o token de acesso na primavera oauth2 - spring, spring-security, oauth-2.0, spring-oauth2

Segredo do cliente + atualizando o token de acesso no spring oauth2 - spring, spring-security, oauth-2.0, spring-oauth2

Estou usando o boot spring para backend e o dispositivo Android para frontend do meu sistema. No momento, estou enfrentando o desafio de usar o Spring-OAuth2 para proteger meu servidor de recursos.
Eu tenho algumas perguntas que quero discutir com você:
Meu conhecimento + este tutorial Estou dizendo que devo usar o tipo de concessão "senha" do OAuth2.0 para meu aplicativo móvel para obter um token de acesso. O oficial tutorial de primavera para segurança dá um exemplo de como obter o token de acesso usando o tipo de concessão de senha:

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

E aí vem minha primeira pergunta: Existe alguma possibilidade de obter o token de acesso usando o tipo de concessão de senha sem enviar o "segredo do cliente"?
Já que o segredo do cliente poderia ser "reversoprojetado ", descompilando o aplicativo cliente. A obtenção de token de acesso sem segredo deve ser de alguma forma possível, porque o Facebook SDK para Android também não precisa do client_secret no aplicativo móvel.
Eu acho que aqui tenho um pequeno problemaEntendendo porque o clientID + clientSecret precisa ser incluído na solicitação acima, porque, como já existe um nome de usuário + senha, deve ser possível gerar o token de acesso. Isso traz um próximo nível de segurança? e isso implica o seguinte (exemplo): Estou logado como Filip no meu cliente Android e estou enviando o token de acesso A com cada solicitação para o servidor. Então, faço login como Filip no Web client e tento acessar o servidor de recursos do Web client usando o token de acesso A, o que não é possível porque o token de acesso A foi emitido apenas para o cliente Android?

A próxima pergunta é Como posso atualizar o token de acesso obtido?
Eu estava tentando fazer isso usando o comando abaixo,mas eu tenho "autenticação completa é necessária para acessar este recurso." Depois que eu recebi o novo token atualizado, posso usar o token de atualização para atualizar meu novo token de acesso novamente?

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

Obrigado

Respostas:

0 para resposta № 1

O OAuth 2.0 spec permite os chamados clientes públicos, isto é, clientes que não se autenticam. Portanto, é possível usar a concessão Credenciais de Senha do Proprietário do Recurso com um cliente público, ou seja, um que não precise enviar um segredo de cliente. que o Authorization Server não pode assumir nada sobre o cliente, já que um client_id não é um segredo e não há como evitar que um cliente mal-intencionado usando esse tipo de concessão ou clientes se façam mutuamente. Então, usá-lo desta maneira vem com o custo de segurança reduzida, embora se possa argumentar que, no seu caso, não há como usar clientes confidenciais de qualquer forma, então não há diferença.

Em geral, a concessão de Credenciais de Senha do Proprietário do Recurso é um antipadrão para o OAuth e destina-se apenas à migração, pois anula a maioria das metas do OAuth em si.

Os tokens de acesso são emitidos por cliente.

Você atualizar solicitação de token parece OK, mas oO Authorization Server pode exigir autenticação básica em vez de fornecer o client_id / client_secret como parâmetros de postagem, considerando que você fez o mesmo para a solicitação de token de acesso original.