
Temos um farm ADFS 4.0 do Windows 2016 (banco de dados WID, não SQL Server) hospedado no Azure.
Estamos trabalhando com um novo aplicativo OpenID Connect e queremos usar ADFS para autenticar e preencher perfis de usuário do AD. O aplicativo está usando um segredo compartilhado para a configuração do JWT.
Isso foi muito fácil de configurar em nosso ambiente de teste (farm de nó único).
Quando configuramos o mesmo servidor de aplicativos em nosso servidor ADFS de produção, inicialmente obtivemos sucesso, mas após o login, começamos a receber erros de login intermitentemente. Depois de fazer login no ADFS, você será direcionado para o URL de retorno de chamada. Isso redireciona você para uma página de login e nessa página há uma caixa de diálogo modal com esta mensagem de erro: Call to IdP failed to get identity
Se clicarmos em atualizar algumas vezes, eventualmente, o aplicativo nos permitirá entrar no aplicativo. Quando executamos um rastreamento do violinista na conexão ruim, encontramos este erro:
{"errorCodeString":"camAuthUnrecoverable",
"messages":[{"messageString":"Call to IdP failed to get identity. Status 400\nError: invalid_grant\nError description: MSIS9612: The authorization code received in 'code' parameter is invalid. "}],
"promptInfo":{"captions":["Call to IdP failed to get identity"]}}
Encontrei erros no visualizador de eventos ADFS com este tipo de mensagem:
Encountered error during OAuth token request.
Additional Data
Exception details:
Microsoft.IdentityServer.Web.Protocols.OAuth.Exceptions.OAuthAccessTokenInvalidAuthorizationCodeException:
MSIS9252: The authorization code received is invalid.
No artifact found for the specified authorization code: '//redacted//'.
The cause may be that artifact has timed out, or the authorization code was replayed, or the authorization code is invalid.
at Microsoft.IdentityServer.Web.Protocols.OAuth.OAuthToken.OAuthTokenProtocolHandler.RedeemAccessToken(OAuthAccessTokenRequestContext tokenContext)
Em todos os casos, conseguimos fazer login depois de clicar em recarregar várias vezes.
Quando reduzimos o número de nós no farm para 1, o problema pareceu desaparecer e reapareceu quando adicionamos novamente os nós.
Outras pessoas se depararam com esse problema ao configurar aplicativos openid connect/oAuth2? Como você resolveu isso?
Embora a resolução de artefato SAML2 não seja suportada no ADFS 4.0 usando WID, não há nada dizendo que o mesmo problema se aplica ao OpenID Connect, embora seja meu único palpite sobre o problema. Vale a pena gastar para converter o ADFS para usar um cluster do SQL Server?
Responder1
Isso é um problema se você:
- tenha um farm ADFS com vários nós.
- Nós ADFS estão usando WID (SQLExpress/LocalDB)
- Usando um "Grupo de Aplicativos" (aplicativo OIDC) com uma API Web configurada para emitir declarações.
Ao contrário da (maioria) das conexões SAML, o OIDC recupera dados diretamente do IDP.
O ADFS+SQLexpress compartilha apenas a configuração entre nós, portanto, se seu aplicativo tentar recuperar tokens de um nó de farm diferente daquele em que você se autenticou, ele falhará.
A resposta rápida é mudar o ADFS de uma configuração SQLExpress para uma implementação do SQL Server. Quando fiz isso, o OIDC funcionou de forma consistente.
É difícil encontrar documentação para isso. Minhas fontes desapareceram, colocarei minhas anotações online e fornecerei um link para elas quando tiver oportunidade.
Links antigos que não funcionam mais: