Eu uso esta biblioteca para usar oidccom nodejs
O que eu preciso é o seguinte:
login do usuário com senha do usuário, ou tenha os dados já no cookie da sessão. isso está chamando para a rota raiz do meu aplicativo"/"
Já cadastrei a aplicação no authorisation server, o auth server deve ligar para o meu oapp/redirect
do servidor de autenticação, peguei o clientId e o segredo do cliente e coloquei no aplicativo.
Quando o usuário logado, o servidor de autenticação deve chamar minha rota de redirecionamento de aplicativo.
Da oidcestratégia eu preciso pegar o tokenset.claims();e dela tokenset.id_token, o token do usuário. , na chamada de redirecionamento
deve ser com
response_type: 'code',
https://github.com/auth0/express-openid-connect#getting-started
O problema é que a getUserfunção é chamada (durante a depuração do aplicativo), no entanto, obtive o userIdentityque req.session.userIdentityé undefined, alguma ideia do que pode estar errado aqui?
Estamos tendo a mesma implementação antiga que usa OIDC e funciona para o mesmo servidor de autenticação, id de cliente e segredo.
const { auth, requiresAuth } = require('express-openid-connect');
const session = require('express-session');
const bodyParser = require('body-parser');
module.exports = async (app) => {
const ClientId = process.env.CI;
const ClientSecret = process.env.CS;
const URL = process.env.S_URL;
app.use(session({
name: 'bat-auth',
secret: 'cookie-secret',
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(auth({
clientSecret: ClientSecret,
issuerBaseURL: `${URL}`,
clientID: ClientId,
baseURL: process.env.REDT_URL,
redirectUriPath: '/redirect', //my app redirect route
authorizationParams: {
response_type: 'code',
response_mode: 'form_post',
scope: 'openid',
},
async handleCallback(req, res, next) {
req.session.openidTokens = req.openidTokens;
console.log('---req.openidTokens', req.openidTokens);
req.session.userIdentity = req.openidTokens.claims();
next();
},
async getUser(req) {
return req.session.userIdentity;
},
}));
app.get('/', (req, res) => {
const tokenSet = req.openid.makeTokenSet(req.session.openidTokens);
console.log(`tokenset root: ${tokenSet}`);
res.send(req.isAuthenticated() ? 'Logged in' : 'Logged out');
});
app.get('/redirect', async (req, res) => {
const tokenSet = req.openid.makeTokenSet(req.session.openidTokens);
console.log(`tokenset: ${tokenSet}`);
console.log('redirect called');
res.send('redirect called');
});
Devo usar o form post e no final, o que preciso é pegar do tokenset, user.id_token?
Isto é o que eu tenho, e verificado!
- ClientID do servidor de autenticação
- ClientSecret do servidor de autenticação
- Configure o servidor de autenticação do
redirectcaminho do meu aplicativo, que deve me chamar após o login bem-sucedido- Eu também tenho a
audchave
A propósito, ao depurar o aplicativo, ele não para de adicionar a função handleCallback , mas para no getUseraplicativo primeiro, sem saber qual poderia ser o motivo ...
Parece que você está tentando ler, req.session.userIdentitymas nunca o configurou em nenhum lugar. Você está definindo req.session.openidTokensem vez disso.
Com base no código de exemplo , você provavelmente deseja modificar sua função handleCallback para o seguinte:
async handleCallback(req, res, next){
req.session.openidTokens = req.openidTokens;
console.log('---req.openidTokens', req.openidTokens);
req.session.userIdentity = req.openidTokens.claims(); // <-- this is required to make your code sample work
next();
}
Alguns pontos de olhar para o que você fez. Você não tornou muito fácil para as pessoas responderem à sua pergunta, e há mais coisas que você pode fazer para melhorar seu próprio autodiagnóstico:
MODO DE RESPOSTA
Livre-se desse campo - acho que estou certo ao dizer que isso sempre deve ser definido como 'consulta' para a resposta de autorização e esse será o valor padrão. É possível que esteja causando problemas.
SINTAXE ASÍNCRONA
Posso estar errado, mas começaria com a sintaxe exata da página Auth0 . Às vezes, cometi erros nessa área por meio da sintaxe errada.
handleCallback: async function (req, res, next) {
req.session.userIdentity = req.openidTokens.claims();
next();
},
DEBUGAÇÃO HTTP
Tore está 100% certo ao dizer que você deve rastrear mensagens e postar quaisquer falhas aqui. Para ver um exemplo de como as mensagens devem ser, consulte minha postagem no blog . Isso abrange o Fluxo de Código de Autorização (PKCE) do lado do cliente em vez do Fluxo de Código de Autorização do lado do servidor, mas as mensagens são muito semelhantes.
O ponto mais amplo aqui é que, se você não entender as mensagens OAuth e os campos de token, será frequentemente bloqueado, em vez de ser capaz de diagnosticar seus próprios problemas. No seu caso, talvez a etapa 7 não esteja voltando como o parâmetro de consulta esperado e a biblioteca esteja falhando como resultado?
COMO CAPTURAR MENSAGENS HTTP
Você pode atualizar sua configuração da mesma forma que minha API NodeJS adicionando o seguinte tipo de configuração e, em seguida, executando uma ferramenta como Fiddler ou Charles. Você deve ser capaz de capturar mensagens OAuth entre seu back-end da Web e o servidor de autorização e, em seguida, postar as falhas aqui:
auth({
client_id: 'qhuefhuef',
...,
httpOptions: {
agent: TunnelAgent.httpsOverHttp({
proxy: Url.parse('http://127.0.0.1:8888'),
})
}
Vale a pena dedicar um pouco de tempo para fazer isso funcionar e beneficiará todo o desenvolvimento futuro nessa área. Alguns detalhes adicionais na minha escrita de depuração HTTP .
MANIPULAÇÃO DE ERROS
Outra possibilidade é que o Authorization Server está retornando uma resposta de erro nos campos padrão 'error' / 'error_description' e você não está lidando com eles.
Não fique satisfeito depois de resolver seu problema imediato. Existem várias partes móveis para soluções OAuth e problemas intermitentes acontecem, que você deseja resolver rapidamente depois de implantar seu aplicativo para testadores ou produção.
Sempre recomendo fazer com que as mensagens OAuth falhem durante o processo de desenvolvimento e, em seguida, garantir que você esteja capturando os dados corretos e controlando os relatórios de erros da interface do usuário. Veja as etapas 10 e 17 do meu artigo para obter uma abordagem para testar os pontos de falha.
Jana Duggar foi aberta sobre sua busca pelo amor. Aqui está tudo o que ela disse sobre o assunto e sua janela de cinco anos para o casamento.
O astro de 'Outlander', Sam Heughan, revelou recentemente o que vai levar do set para relembrar Jamie Fraser, o papel que o tornou uma estrela.
'She Loves You' foi escrita em uma hora, gravada em um dia, e foi a música dos Beatles com uma de suas melhores apresentações de sua carreira.
Dolly Parton e sua avó Bessie tiveram um relacionamento especial. Vovó Parton estava muito doente, mas isso não impediu Dolly de pregar uma peça nela.
Você pode achar que o carvalho ou a nogueira são madeiras resistentes, mas quando se trata da madeira mais dura do mundo, elas nem chegam perto.
O oceano é repleto de beleza, mas também esconde algumas das criaturas marinhas mais assustadoras do planeta. Muitos desses animais espreitam nas profundezas do oceano, no mundo escuro e de alta pressão do fundo do mar.
Se você está enfrentando criaturas hostis ou se preparando para cenários PvP, conhecer os melhores encantamentos de espada no Minecraft pode te dar uma grande vantagem. Encantar espadas permite causar mais dano, aumentar a quantidade de itens obtidos de criaturas e prolongar a durabilidade da sua espada.
Quando as pessoas falam sobre países socialistas, geralmente imaginam o controle total do governo e a ausência de propriedade privada. Mas, na prática, as economias socialistas variam muito.
“Children” traz uma participação especial de grande nome e algumas notícias devastadoras
Este RAV4 está em excelentes condições e está preparado para um jogo de cadeiras musicais.
Imagens de drone capturaram bombeiros parecendo lutar para apagar o incêndio.
Eyes of Wakanda está diretamente relacionado ao MCU, além de atualizações sobre X-Men '97, What If..., Demolidor e muito mais.
O anel de noivado de Kate Middleton pertenceu à Princesa Diana antes do Príncipe William pedi-la em casamento. Descubra tudo o que há para saber sobre a peça histórica aqui.
John Cleese se casou com sua esposa, Jennifer Wade, em 2012. Aqui está tudo o que você precisa saber sobre a esposa de John Cleese, Jennifer Wade.
Patton Oswalt se casou com sua esposa, a também atriz Meredith Salenger, em 2017. Aqui está tudo o que você precisa saber sobre a esposa de Patton Oswalt, Meredith Salenger.
Mena Suvari é casada com o marido Michael Hope desde 2018. Aqui está tudo o que você precisa saber sobre o marido de Mena Suvari.
Isso me atinge De repente, como tantas vezes acontece É o meio do caminho tudo de novo <Não, não aquele no Pacífico, seu marrom, aquele no carnaval> Todas as manchetes em voz alta…..
Em 2022, com o lançamento do GPT-3, a habilidade de escrita parece se tornar menos importante. Com a IA, pessoas com redação ruim também podem gerar funcionários de qualidade.
No mundo acelerado e competitivo de hoje, a carreira desempenha um papel significativo no crescimento pessoal, na estabilidade financeira e na satisfação geral com a vida. No entanto, muitos indivíduos encontram-se presos em um ciclo implacável de estagnação e insatisfação, definhando gradualmente em suas vidas profissionais.
Na semana passada, notei um comunicado de imprensa, enviado via PressGazette (um site de notícias da mídia britânica). O artigo anunciava que a Acast, a empresa de publicidade e hospedagem de podcast Scandi, lideraria um consórcio de "provavelmente os editores mais influentes" em podcasting.