我需要在NestJS和GrapphQL(type-graphql)中使用keycloak。有一些将其与纯Express结合使用的指南,但我更喜欢与NestJS身份验证模式结合使用。有人可以提出任何建议吗?
答案 0 :(得分:2)
我从来没有亲自尝试过,但是我想我会很快的。我会做什么:
我希望这可以帮助您。最终,您将在KeyCloak中使用护照的OpenID实现,并可以使用防护来保护您的路线/方案。
答案 1 :(得分:2)
这是一个古老的问题,但是由于我刚刚完成了实现,所以我想指向一个很棒的教程Protecting your NestJS API with Keycloak。它不使用passport
,而只是在Keycloak上调用OpenId Connect UserInfo端点:https://openid.net/specs/openid-connect-core-1_0.html#UserInfo。
我发现添加到应用程序非常容易,非常易于遵循,并且通常都非常好用(与我之前使用的未命名的SaaS应用程序相比)。
async authenticate(accessToken: string): Promise<User> {
const url = `${this.baseURL}/realms/${this.realm}/protocol/openid-connect/userinfo`;
try {
const response = await this.httpService.get<KeycloakUserInfoResponse>(url, {
headers: {
authorization: `Bearer ${accessToken}`,
},
}).toPromise();
return {
id: response.data.sub,
username: response.data.preferred_username,
};
} catch (e) {
throw new AuthenticationError(e.message);
}
}