Client Dynamic Registration for native and in-browser apps

Boa noite,

Primeiro gostaria de parabenizar o livro. Ficou muito bom e tirou muitas para a aplicação que estou desenvolvendo. Porém também me gerou novas dúvidas, hehe. Normal… Vamos a elas. Primeiro para confirmar que entendi direito e segundo garantir segurança.

O meu App será composto de dois back-ends:
1 - Authz Server
2 - Resource Server

E dois fronts
1 - SPA com Angular 2
2 - Aplicativos nativos, IOS e Android

Lendo o livro vi que não é indicado guardar o client secret, em nenhum desses fronts. O correto seria eu utilizar o Client Dynamic Registration, para obter o secret. Até que entendi certo ok?

Supondo que sim vamos para o próximo ponto.

Preciso garantir que só minhas aplicações consigam se registrar. Então principal dúvida é sobre isso. Como ter essa garantia?

Lendo a RFC 7591, ele falam sobre utilizar o parâmetro software_statement. Isso realmente vai garantir que só minha aplicação esta tentando se registrar?

Outra forma que vi é proteger o endpoint, necessitando assim de um token, que ao meu ver, após ser usado deve ser descartado. Como garantir que só minha aplicação vai ter esse token?

Esses códigos iriam ser distribuídos no meu app? Se sim, isso não seria o mesmo do que deixar o secret?

Eu comecei a ler essa RFC 8252, mas me pareceu que ele foca mais na obtenção do token do resource owner do que no processo de registro dinâmico do client. E como a aplicação é própria a ideia é usar o grant type password.

Sobre as formas sugeridas para o Nativo.
O que seria o private-uri scheme? Tipo uma URL do app no celular?

Sobre as informações especificas. Quais seriam? Porque dependendo vai ficar no fonte também e podem ser roubadas certo?

Sobre o SPA.
O modo implicito traz um problema de usabilidade não? uma vez que não tem refresh token vou precisar ficar redirecionando o usuário no meio de uso?
Interessante saber que o Authorization Code também é uma opção válida. Dessa forma não impacta na experiência do usuário.

Interessante, não sabia que podíamos ter esse valor protegido, achei que teria que estar no código.

Pelo que tenho pesquisado. Nesse caso o ideal é gerar um token inicial que será usado pelos apps, com escopo apenas de criação de client. E os apps matem esse token protegido no firebase ou em algum local parecido (também não sou um expert em mobile). Então só poderá se registrar com ele. Funciona bem p o grant_type password.

Já para aplicação SPA que vai utilizar o grant_type authorization_code, deixo o client_id fixo, mas limito o cadastro para apenas client onde a redirect_uri aponte para meu domínio. Então mesmo que um client malicioso se cadastre, quando tentar acessar vai redirecionar para meu site mesmo. Aí usando junto o parâmetro code, não vai conseguir o acesso.

Legal. Gostei das abordagens. Muito obrigado pelas dicas.

1 curtida