【发布时间】:2018-10-25 13:10:26
【问题描述】:
我正在寻找如何使用 NestJS 实现 Auth0 的Authorization Code Grant 流程的示例。
【问题讨论】:
标签: javascript node.js typescript auth0 nestjs
我正在寻找如何使用 NestJS 实现 Auth0 的Authorization Code Grant 流程的示例。
【问题讨论】:
标签: javascript node.js typescript auth0 nestjs
为了在处理exchange of the Authorization Code for an Access Token的后端创建POST端点/authenticate,我们需要首先定义端点期望的dto。
我们期望来自客户端的对象具有 authorization_code 和 origin 字段。
authorization-request.dto.ts
export class AuthorizationRequestDto {
readonly authorization_code: string;
readonly origin: string;
}
现在我们可以创建一个controller 来处理发送到/authenticate 的POST 请求:
import { Body, Controller, HttpService, Post } from '@nestjs/common';
import { AxiosResponse } from '@nestjs/common/http/interfaces/axios.interfaces';
import { Observable } from 'rxjs/internal/Observable';
import { map } from 'rxjs/operators';
import { AuthorizationRequestDto } from './authorization-request.dto';
@Controller('authenticate')
export class AuthController {
constructor(private readonly httpService: HttpService) {}
@Post()
authenticate(@Body() authorizationRequestDto: AuthorizationRequestDto): Observable<AxiosResponse<any>> {
return this.httpService.post('https://YOUR_AUTH0_DOMAIN/oauth/token', {
grant_type: 'authorization_code',
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
code: authorizationRequestDto.authorization_code,
redirect_uri: authorizationRequestDto.origin,
}).pipe(
map(response => response.data),
);
}
}
当然,在上面的代码中,我们需要替换YOUR_AUTH0_DOMAIN、YOUR_CLIENT_ID和YOUR_CLIENT_SECRET。
【讨论】: