ASP.NET Core 3.1 - PKCE Component

No post ASP.NET Core 3.1 - IdentityServer4 - Client-Security-PKCE (Parte 11) eu falei sobre o PKCE (Proof Key for Code Exchange).

Eu percebi também que a implementação dele não é algo trivial, então decidi fazer um componente para apenas chamar o método de extensão UsePkce() através das options do serviço para o protocolo do OpenID Connect. Este componente segue os passos do tópico do protocolo da RFC 7636.

NuGet

O componente criado foi publicado no NuGet.

Para instalá-lo, basta utilizar o comando a seguir, ou pelo Visual Studio - mais fácil - basta adicionar a referência através do gerenciador de pacotes.

Install-Package Hopper.Authentication.OpenIdConnect.Pkce

Ou ainda, adicionar diretamente no csproj, como achar melhor!

<ItemGroup>  
    <PackageReference Include="Hopper.Authentication.OpenIdConnect.Pkce" Version="1.0.2" />
</ItemGroup>  

GitHub

O código fonte do componente está no GitHub

Eu utilizei as Actions do GitHub para gerar a versão do pacote, compilar, gerar o pack para o NuGet e fazer a publicação automática sempre que uma nova versão de release for criada, vou explicar nos tópicos finais este processo, como fazer.

MVC (Model View Controller)

Em uma aplicação MVC, a configuração pode ser feita conforme o código a seguir.

Server

Não esqueça que o provider de autenticação/autorização precisa entender que vai receber uma solicitação com PKCE. No meu caso eu usei o IdentityServer4 com o client configurado com a obrigatoriedade do PKCE, então isso vai obrigar que o code_challenge seja enviado.

Neste link, tem uma aplicação completa usando o componente e também o IdentityServer4.

NuGet Publish

Saiba como eu publiquei o componente no NuGet através do post ASP.NET Core 3.1 - PKCE Component - NuGet Publish