C# rest api oauth2 구현 방법 질문이요..

C# 으로 REST API 를 만들어보고 있습니다…

아래 내용이 이해가 가지 않아서 이렇게 질문을 남깁니다.

아래 내용을 구현하려면 어떤 부분을 검색해서 찾아봐야할지 알려주시면 감사하겠습니다…

c# rest api 구현으로 검색도 해보고, c# rest api oauth2 로도 검색을 해보았으나 … 어떻게 저 내용을 구현해야할지 감이 잡히지가 않습니다…

==============================================================

authorization code grant 방식의 OAuth2인증만 허용한다.

0.Client id 사용승인

발급받은 client_id, client_secret을 최초 1회에 한해 사용승인을 하는 절차

파라미터의 scope에 협력사인 경우 “CMS_PARTNER,CMS_INSTITUTE”, 이용기관인 경우 “CMS_INSTITUTE”를 넣어준다.

이 부분에서 누락이 있을 경우 권한코드 및 접근토큰 발행 시 누락된 scope는 거부되므로 주의한다.

1.권한코드(authorization code)발급

API KEY(client_id, client_secret)이 사전에 발급되어있는 상태인 경우에 여기부터 이용 가능

1-1.authorization code 발급요청 : GET /auth/authorize

→ 쿼리 파라미터로 client_id, state(클라이언트에서 CSRF 차단을 위해 설정하는 string, redirect uri의 query string에 포함되어 전달됨), redirect_uri, inst_code(CMS기관코드;CMS_PARTNER scope인 경우 0000000000), scope, response_type(“code” 고정), username(client_id와 동일한 값)를 세팅하여 넘긴다.

→ redirect uri로 발행된 authorization code 값이 "code"라는 쿼리 파라미터로 전달된다.

→ 발행된 authorization code의 유효기간은 5분이다.

2.접근 토큰(access token)발급

발행된 authorization code를 이용하여 access token을 발급한다.

2-1.access token 발급요청 : POST /auth/token → application/x-www-form-urlencoded형식으로 client_id, code(authorization code), grant_type(“authorization_code” 고정), scope, client_secret, redirect_uri 값을 세팅하여 넘긴다.

→ 발급된 결과로 access_token, token_type, refresh_token, expires_in, scope, inst_code, partner_id 등의 정보를 받을 수 있다.

2-2.발급된 access token의 유효시간은 같이 응답으로 리턴된 expiry 항목을 참고한다.

3.접근토큰을 이용한 업무요청 처리.

발행된 access_token을 http request header “Authorization” 안에 Bearer 타입으로 넣은 상태로 요청한다. 보다 자세하게는, “Bearer(공백1칸)(발급된 access token)”(따옴표, 괄호 제외) 의 형식으로 넣어주면 된다.

4.그 외, 발행된 access token을 발행한 서버 이외의 클라이언트(예 : 모바일, 고객PC 등)에서는 직접 이용이 불가능하다. (IP whitelist로 차단처리)

5.발행된 권한코드, 접근토큰, 리프레시 토큰 등이 외부 시스템에 유출되지 않도록 유의한다.


**6.권한코드 발급 시 입력하는 CMS기관코드에 따라 발급되는 접근토큰의 scope와 권한이 정해진다. **

Swagger의 업무요청 처리 항목을 확인하여 scope에 따른 이용가능한 API목록을 확인해야 한다.

(예 : CMS_INSTITUTE scope로는 공통정보 조회, 기관정보 관리, 실시간서비스, 파일송수신 API 이용이 가능하고 CMS_PARTNER scope로는 공통정보 조회, 협력사 정보 관리 API이용이 가능하다.)

1개의 좋아요

혹시 1번 단계인 권한코드는 발급 받으셨나요?

1개의 좋아요

예 발급 받았습니다

1개의 좋아요

그럼 올려주신 글에서 몇 단계에서 잘 안되시는건가요?

1개의 좋아요

처음부터 모르겠습니다 ㅜㅜ
1-1 권한코드 발급 부분에, 쿼리 파라미터로 여러 값들을 넘긴다는게 무슨 말인지 모르겠어요…

1개의 좋아요

// UriBuilder를 사용하여 요청 URL을 동적으로 생성
var builder = new UriBuilder(baseUrl);
builder.Query = $“client_id={clientId}&state={state}&redirect_uri={redirectUri}&inst_code={instCode}&scope={scope}&response_type={responseType}&username={username}”;

위와 같은 형식으로 파라미터를 만들어서 api 에 요청하도록 해결햏ㅆ습니다!!

2개의 좋아요

아 다행이네요!!!

비슷한 방식으로 몇 번의 API 호출을 더 하셔야 하는걸로 기억하는데

다음 과정들은 모두 다 잘 하셨나요?

1개의 좋아요

앗 아직 다 하진 않았구요, api를 제공해주는 업체에서 swagger 가 있어서 그거보고 하면 될 것 같아요! 뭔가 방향이 잡혀서 이제 천천히 하면 될 것 같습니다, 혹시 또 모르는게 있으면 질문할게요!

1개의 좋아요

아! 네 알겠습니다~ ㅎㅎ

1개의 좋아요