Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

C# - JIRA REST API 사용 정리 (3) jira-oauth-cli 도구를 이용한 키 관리

JIRA에 대한 REST API 호출을 OAuth 인증으로 다루는 방법을 설명했는데요,

C# - JIRA REST API 사용 정리 (2) JIRA OAuth 토큰으로 API 사용하는 방법
; https://www.sysnet.pe.kr/2/0/12562

다행히 저 글에서 설명한 token 생성은 현재 jira-oauth-cli 도구 덕분에 쉽게 처리할 수 있게 되었습니다. 이에 대해서는 다음의 문서에서 자세하게 설명하고 있는데요,

How to Connect to Jira using OAuth
; https://bitbucket.org/farmas/atlassian.net-sdk/src/e51934c33c796ba9b4c83bac75f740ed4d04bc2f/docs/how-to-connect-using-oauth.md

얼마나 쉬운지 직접 따라 해볼까요? ^^

우선, 다음과 같이 jira-oauth-cli 도구를 설치하고,

c:\temp> dotnet tool install -g jira-oauth-cli

다음의 명령어로 Access Token 생성을 진행할 수 있습니다.

jira-oauth-cli setup --url <jira_url> -u <jira_user> -p <jira_password> -k <consumer_key>

jira_user: JIRA 로그인 계정
jira_password: jira_user의 암호
consumer_key: 임의의 문자열

예를 들어 다음과 같은 식으로 입력해 진행하면 됩니다.

/*
계정: testusr
암호: qwer
consumer_key: OauthKey
JIRA 서비스 주소: http://jira.myservice.com
*/

c:\temp> jira-oauth-cli setup --url http://jira.myservice.com -u testusr -p qwer -k OauthKey

그럼 실행과 함께 자체적으로 개인키/공개키를 만들고 JIRA에 OAuth Access Token을 구하기 위한 절차를 다음과 같이 진행합니다.

c:\temp> jira-oauth-cli setup --url http://jira.myservice.com -u testusr -p qwer -k OauthKey
Create an App Link

Go to https://developer.atlassian.com/server/jira/platform/oauth and follow instructions with the data below:
Your Consumer Key is: OauthKey
Your Public Key is:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArAHIZSmty3jd8dHH2Rjz
yw//qrbPQQuulD39j9uVXd1WywXjw7ljtf8vmXqLAcEytBtPEU37DQxpYVKof97g
oYFSTN16Bq1EUQWmY31lRQ72iKeXIwR3K2FbLPKDKg02K5c6hh5s1GX3b4XlJEja
PmhQzbbUM5RRYnf1hERGw1vE7kfrJxfBv8PyBFeehmhrIa5XU1SR2bBhgRV1ZXzt
Ap+ykuCfnub3sxMnz4kZqhb/+q9qq34txwlnOdn9ibQQnNMugVuZ7GoINzggdtzu
8gWi9JGPGl53O2eC5CDoDc3q0fjdKp/+Q8gx+J00ZhW4Z4uLXYczr1P3DhBocxL8
8QIDAQAB
-----END PUBLIC KEY-----

Hit 'Enter' when you are done configuring the AppLink.

"jira-oauth-cli setup ..." 명령어의 실행 결과로 출력된 "https://developer.atlassian.com/server/jira/platform/oauth" 링크가 바로 지난 글에서 키를 생성하기 위해 따라 했던 과정을 설명하는 문서입니다. 즉, 위의 명령어는 그 글에서 설명하는 방법에 따라 OAuth 인증을 위한 액세스 토큰을 생성하려는 것이고, 편의상 (아직 출력하지는 않았지만 개인키와 함께) "Public Key"를 임의로 만들었으니 그것을 가지고 AppLink를 생성하면 됩니다. 그 방법은 지난 글에서 "Application links"로 이미 설명했으니 그 내용을 참고하시면 됩니다.

그렇게 해서 "OauthKey"에 해당하는 Application Link를 JIRA에 로그인해 생성해 두었으면 이제 "Enter" 키를 눌러 다음 단계로 진행합니다. 그럼 화면에 다음과 같은 출력이 이어지고,

Generating Request Token

Authorizing token 'http://jira.myservice.com/plugins/servlet/oauth/authorize?oauth_token=c8mJdcIpNACsBz9LvUOf91XjaDoy9Zb0'

Unable to automatically authorise token, please visit 'http://jira.myservice.com/plugins/servlet/oauth/authorize?oauth_token=c8mJdcIpNACsBz9LvUOf91XjaDoy9Zb0' in a browser.
Hit 'Enter' when you are done authorizing the token.

화면에 보이는 "Authorizing token 'http://..." 링크를 직접 방문해 지난 글에서와 마찬가지로 "Allow" 버튼을 눌러 승인을 해줍니다. 그럼 웹브라우저에는 다음과 같이 성공했다는 메시지가 뜨고,

Access Approved
You have successfully authorized 'Example Jira app'. Please close this browser window and click continue in the client.

이것을 확인했으면 진행 중이던 "jira-oauth-cli setup ..." 콘솔 창에서 "Enter" 키를 눌러줍니다. 그럼, 마지막으로 화면에는 OAuth 인증을 위한 Access Token 정보를 (개인키 정보를 담은 "Consumer Secret" 필드와 함께) 출력하는 것으로 작업이 마무리됩니다.

Generating Access Token

Consumer Key: OauthKey
Access Token: ei60qdMw7jBoOi5G44thD5jLJ3KzTelE
Token Secret: T8qah2TYIqHZXLvFBYv4mRlIx9eye6Fm
Consumer Secret:
<RSAKeyValue><Modulus>rAHIZSmty3jd8dHH2Rjzyw//qrbPQQuulD39j9uVXd1WywXjw7ljtf8vmXqLAcEytBtPEU37DQxpYVKof97goYFSTN16Bq1EUQWmY31lRQ72iKeXIwR3K2FbLPKDKg02K5c6hh5s1GX3b4XlJEjaPmhQzbbUM5RRYnf1hERGw1vE7kfrJxfBv8PyBFeehmhrIa5XU1SR2bBhgRV1ZXztAp+ykuCfnub3sxMnz4kZqhb/+q9qq34txwlnOdn9ibQQnNMugVuZ7GoINzggdtzu8gWi9JGPGl53O2eC5CDoDc3q0fjdKp/+Q8gx+J00ZhW4Z4uLXYczr1P3DhBocxL88Q==</Modulus><Exponent>AQAB</Exponent><P>1g6MRFnKO2OT48JG2dbb02Xlj2yzBBa7edDrsjLtem8dhqeCcXEZfCwOFfx4IpxMsLs80PuCRx+ECoq5qYDi+72piH2Er0zturVk6tp7eoQzo5IFKRflc3odt48vNJZoC9jzjeFEoOf4e3E1pW97IaqyiLWW6yGBlY5p75UlL+c=</P><Q>zbXxUzCoaISXPWuBuYluMtx8CybGKEIOByXpwusvL/d5O9C69mcck4NzeLsvVVJJXXnsM3bDENHUtQOE1zAhsBrhVeBrRrggqB1IdQNgfOdqi3ueo+NrSxuaCkQ5h4jPska3Lll2PA4M4CywUWpO2O5rVlh3WzNI3UpcmSVSsWc=</Q><DP>MhSjQpaTVwO8JQxeETdQpQvxAnZXB7zdzelQS5fYsc1vZgKo5Sul38Ra40/3N3nEA5E68FX3q/Y2qVS9jWfHM0izcmiTc4QXFpi77KqDOy3U+w79wBiEKVlHvJt2WuJZo3P1v5sVuGOtYgwhlfwYHc9XB98cWRS0wa3ZISGO2r8=</DP><DQ>P6SuyQIg2FVNRV9hfzmZsnqslfalEAd/t45vSDLjIn/6Lhth/KHiIXFl5FBlUIxozlbOUQ3JRAbnPCmei8UEZyup05vfFL4avGhy5mDpFTuzpvvUFPhjVZVwjwSUl+4n9AwU2G4tOl9OdHzfABFX253H76rnInw3at96zpbRgrk=</DQ><InverseQ>jPOVHue9abYFo9+QVA0bsPLbWCMrrsprLUdZpPkjgGip4spMZr8HJFXzPPLiUPNGvIoIPKHF9/Um64XjKdWdjYt6zBlX/x935VPbU8eQ+EoI4R39WFsDvuOKxuWxaDjTwceIiR+TpH8vniLJPe4oE5+HEeVKcxerpVtB9ChyHBM=</InverseQ><D>KP7zyEi6x3gzTeN2AmRUFt3lTcbsdtBV97cerB7l5s1OVm087/VLsqDzs1zlrLFjaFHp8nHnmCCRLUUKLA/u8g9kkjVnVBgP5E+4bJYCgQcj80YeW5ZA4PH/TSMv5+HmO1V7+WNfBPCYnNgI2TET8zPhrmYZBYIgM5vrxG6RfxYIOXGjo/4msrAVdk35lkhAOoiLpB6ifqqIcer3JgvnVFE9CNxF+vFHGzKkjnCUn6AH/9AcpR7KuHe2Psx8YRjMp4ukrgyFsCrDrMb1SIJWfI5DrZKVZdlbXQIaveVncyIP3R+J8iNmYKZDeLOb08hpoL27B+YGjEGiZSEKVXGCkQ==</D></RSAKeyValue>

자, 복잡했던 OAuth 토큰 생성 작업이 이렇게나 간단하게 해결이 되었습니다. 이제 남은 것은 위의 출력 정보를 바탕으로 Atlassian.SDK 패키지를 참조 추가한 프로젝트에서,

Install-Package Atlassian.SDK

각각의 값을 초기화한 후 REST API를 호출하면 됩니다.

static async Task Main(string[] args)
{
    var consumerSecret = "<RSAKeyValue>...[생략]...</RSAKeyValue>";
    string consumerKey = "OauthKey";
    string accessToken = "ei60qdMw7jBoOi5G44thD5jLJ3KzTelE";
    string accessTokenSecret = "T8qah2TYIqHZXLvFBYv4mRlIx9eye6Fm";

    var client = Atlassian.Jira.Jira.CreateOAuthRestClient("http://jira.myservice.com",
            consumerKey,      
            consumerSecret,   
            accessToken,      
            accessTokenSecret 
        );

    var issue = await client.Issues.GetIssueAsync("MYPRJ-100");

    Console.WriteLine(issue.Summary);
}

우와~~~ jira-oauth-cli 도구 덕분에 "C# - JIRA REST API 사용 정리 (2) JIRA OAuth 토큰으로 API 사용하는 방법"과 비교하면 확실히 절차가 간단해졌습니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 3/17/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 31  32  33  34  [35]  36  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
12759정성태8/8/20219311Java: 26. IntelliJ + Spring Framework + 새로운 Controller 추가 [2]파일 다운로드1
12758정성태8/7/20218662오류 유형: 751. Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
12757정성태8/7/20219328Java: 25. IntelliJ + Spring Framework 프로젝트 생성
12756정성태8/6/20218108.NET Framework: 1084. C# - .NET Core Web API 단위 테스트 방법 [1]파일 다운로드1
12755정성태8/5/20217257개발 환경 구성: 593. MSTest - 단위 테스트에 static/instance 유형의 private 멤버 접근 방법파일 다운로드1
12754정성태8/5/20218147오류 유형: 750. manage.py - Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
12753정성태8/5/20218399오류 유형: 749. PyCharm - Error: Django is not importable in this environment
12752정성태8/4/20216499개발 환경 구성: 592. JetBrains의 IDE(예를 들어, PyCharm)에서 Visual Studio 키보드 매핑 적용
12751정성태8/4/20219593개발 환경 구성: 591. Windows 10 WSL2 환경에서 docker-compose 빌드하는 방법
12750정성태8/3/20216374디버깅 기술: 181. windbg - 콜 스택의 "Call Site" 오프셋 값이 가리키는 위치
12749정성태8/2/20215793개발 환경 구성: 590. Visual Studio 2017부터 단위 테스트에 DataRow 특성 지원
12748정성태8/2/20216387개발 환경 구성: 589. Azure Active Directory - tenant의 관리자(admin) 계정 로그인 방법
12747정성태8/1/20216972오류 유형: 748. 오류 기록 - MICROSOFT GRAPH – HOW TO IMPLEMENT IAUTHENTICATIONPROVIDER파일 다운로드1
12746정성태7/31/20219042개발 환경 구성: 588. 네트워크 장비 환경을 시뮬레이션하는 Packet Tracer 프로그램 소개
12745정성태7/31/20216871개발 환경 구성: 587. Azure Active Directory - tenant의 관리자 계정 로그인 방법
12744정성태7/30/20217479개발 환경 구성: 586. Azure Active Directory에 연결된 App 목록을 확인하는 방법?
12743정성태7/30/20218142.NET Framework: 1083. Azure Active Directory - 외부 Token Cache 저장소를 사용하는 방법파일 다운로드1
12742정성태7/30/20217412개발 환경 구성: 585. Azure AD 인증을 위한 사용자 인증 유형
12741정성태7/29/20218610.NET Framework: 1082. Azure Active Directory - Microsoft Graph API 호출 방법파일 다운로드1
12740정성태7/29/20217276오류 유형: 747. SharePoint - InvalidOperationException 0x80131509
12739정성태7/28/20217253오류 유형: 746. Azure Active Directory - IDW10106: The 'ClientId' option must be provided.
12738정성태7/28/20217860오류 유형: 745. Azure Active Directory - Client credential flows must have a scope value with /.default suffixed to the resource identifier (application ID URI).
12737정성태7/28/20216789오류 유형: 744. Azure Active Directory - The resource principal named api://...[client_id]... was not found in the tenant
12736정성태7/28/20217321오류 유형: 743. Active Azure Directory에서 "API permissions"의 권한 설정이 "Not granted for ..."로 나오는 문제
12735정성태7/27/20217818.NET Framework: 1081. C# - Azure AD 인증을 지원하는 데스크톱 애플리케이션 예제(Windows Forms) [2]파일 다운로드1
12734정성태7/26/202123816스크립트: 20. 특정 단어로 시작하거나/끝나는 문자열을 포함/제외하는 정규 표현식 - Look-around
... 31  32  33  34  [35]  36  37  38  39  40  41  42  43  44  45  ...