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이용이 가능하다.)