티스토리 인증 서버 구축
옵시디언 티스토리 플로그인을 개발하려고 보니 티스토리는 Server-side의 OAuth 2.0 인증 방식을 제공하고 있다. 예전에는 Client-side 인증 방식도 제공했던 것 같은데…
인증 요청을 클라이언트에서 모두 처리해도 되지만, 그러면 SecretKey가 노출되기 때문에 인증은 서버에서 처리하는게 좋을 것 같다. 조금 귀찮긴 하지만 인증 서버를 개발하기로 했다. 티스토리 Open API 문서를 읽어보니 "Access Token 발급" API 하나만 있으면 될 것 같다.
백엔드 개발 언어와 프레임워크를 조금 고민했는데 그냥 Nest 로 결정했다. Nest CI를 사용하여 프로젝트를 생성했다.
npm i -g @nestjs/cli
nest new tistory-auth-server
nest에서 환경변수 .env
를 사용하기 위해 @nestjs/config
패키지를 설치했다.
yarn add @nestjs/config
설치한 config 패키지 설정을 appModule에 추가했다.
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [ConfigModule.forRoot()],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
그리고 티스토리 API와 HTTP 통신을 위해서 @nestjs/axios
를 설치했다.
npm i --save @nestjs/axios
인증 서비스는 아주 간단하게 구현했다.
async getAccessToken(code: string): Promise<string> {
try {
const response = await this.httpService.axiosRef.get(
'https://www.tistory.com/oauth/access_token',
{
params: {
client_id: this.clientId,
client_secret: this.secretKey,
redirect_uri: this.redirectUri,
grant_type: 'authorization_code',
code,
},
},
);
return response.data;
} catch (error) {
return error.response.data;
}
}
END.
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.