所以我试图将访问令牌保存到Koa中的状态,只是为了以后使用,并且省去了在客户机中传递它的麻烦。
根据Koa的passport oauth2文档,我正在努力将任何内容持久化到 Koa/passport oauth2设置: 应设置和读取AccessOken的路由声明: 问题: >
我甚至应该尝试像这样持久化访问令牌吗?在其他路线上是否有其他途径获得AccessOke?server.koaApp.use(koaSession(
{
key: sessionKey,
rolling: true,
maxAge: sessionMaxAge,
sameSite: 'none',
secure: true,
// @ts-ignore
domain: undefined
},
server.koaApp,
));
// set up passport sessions here
function createPassport() {
const passport = new KoaPassport();
passport.use(new OAuth2Strategy({
authorizationURL: oauthClientAuthUrl,
tokenURL: oauthClientTokenUrl,
clientID: oauthClientId,
clientSecret: oauthClientSecret,
callbackURL: oauthClientRedirectUrl,
}, function(accessToken, refreshToken, params, profile, cb) {
cb(null, {id: 'somedudesID', accessToken});
}));
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((user, done) => {
done(null, user);
});
return passport;
};
router.get('/authorize', passport.authenticate('oauth2'), (ctx: any) => {
const { accessToken } = ctx.session.passport.user;
ctx.state.accessToken = accessToken;
ctx.status = 200;
});
router.get('/get-token-from-state', (ctx: any) => {
console.log(ctx.state.accessToken); // undefined
});
我也有过同样恼人的经历。帮助您删除
我不确定将令牌存储在内存会话中是否是最好的主意--但现在这是我的第一稿。它只需要很小的代码块就可以与keycloak取得联系。
server.js
var app = new Koa();
app.keys = ['keys', 'keykeys'];
var memoryStore = new session.MemoryStore();
// Session
app.use(session({
secret: 'some secret',
resave: false,
saveUninitialized: true,
store: memoryStore
}));
// Passport
const passport = require('./oauth2')
app.use(passport.initialize());
app.use(passport.session());
所以,在回答我自己的问题时,有几个问题:
我可以在本地代理这一切都很好!