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

비밀번호

댓글 작성자
 




... 16  17  18  [19]  20  21  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
13156정성태11/7/20226805.NET Framework: 2064. C# - Mutex와 Semaphore/SemaphoreSlim 차이점파일 다운로드1
13155정성태11/4/20226305디버깅 기술: 183. TCP 동시 접속 (연결이 아닌) 시도를 1개로 제한한 서버
13154정성태11/3/20225779.NET Framework: 2063. .NET 5+부터 지원되는 GC.GetGCMemoryInfo파일 다운로드1
13153정성태11/2/20227070.NET Framework: 2062. C# - 코드로 재현하는 소켓 상태(SYN_SENT, SYN_RECV)
13152정성태11/1/20225689.NET Framework: 2061. ASP.NET Core - DI로 추가한 클래스의 초기화 방법 [1]
13151정성태10/31/20225790C/C++: 161. Windows 11 환경에서 raw socket 테스트하는 방법파일 다운로드1
13150정성태10/30/20225855C/C++: 160. Visual Studio 2022로 빌드한 C++ 프로그램을 위한 다른 PC에서 실행하는 방법
13149정성태10/27/20225771오류 유형: 825. C# - CLR ETW 이벤트 수신이 GCHeapStats_V1/V2에 대해 안 되는 문제파일 다운로드1
13148정성태10/26/20225783오류 유형: 824. msbuild 에러 - error NETSDK1005: Assets file '...\project.assets.json' doesn't have a target for 'net5.0'. Ensure that restore has run and that you have included 'net5.0' in the TargetFramew
13147정성태10/25/20224871오류 유형: 823. Visual Studio 2022 - Unable to attach to CoreCLR. The debugger's protocol is incompatible with the debuggee.
13146정성태10/24/20225710.NET Framework: 2060. C# - Java의 Xmx와 유사한 힙 메모리 최댓값 제어 옵션 HeapHardLimit
13145정성태10/21/20225996오류 유형: 822. db2 - Password validation for user db2inst1 failed with rc = -2146500508
13144정성태10/20/20225811.NET Framework: 2059. ClrMD를 이용해 윈도우 환경의 메모리 덤프로부터 닷넷 모듈을 추출하는 방법파일 다운로드1
13143정성태10/19/20226354오류 유형: 821. windbg/sos - Error code - 0x000021BE
13142정성태10/18/20225170도서: 시작하세요! C# 12 프로그래밍
13141정성태10/17/20226832.NET Framework: 2058. [in,out] 배열을 C#에서 C/C++로 넘기는 방법 - 세 번째 이야기파일 다운로드1
13140정성태10/11/20226214C/C++: 159. C/C++ - 리눅스 환경에서 u16string 문자열을 출력하는 방법 [2]
13139정성태10/9/20226022.NET Framework: 2057. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프로부터 모든 닷넷 모듈을 추출하는 방법파일 다운로드1
13138정성태10/8/20227336.NET Framework: 2056. C# - await 비동기 호출을 기대한 메서드가 동기로 호출되었을 때의 부작용 [1]
13137정성태10/8/20225676.NET Framework: 2055. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프로부터 닷넷 모듈을 추출하는 방법
13136정성태10/7/20226254.NET Framework: 2054. .NET Core/5+ SDK 설치 없이 dotnet-dump 사용하는 방법
13135정성태10/5/20226495.NET Framework: 2053. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프를 분석하는 방법 - 두 번째 이야기
13134정성태10/4/20225235오류 유형: 820. There is a problem with AMD Radeon RX 5600 XT device. For more information, search for 'graphics device driver error code 31'
13133정성태10/4/20225560Windows: 211. Windows - (commit이 아닌) reserved 메모리 사용량 확인 방법 [1]
13132정성태10/3/20225453스크립트: 42. 파이썬 - latexify-py 패키지 소개 - 함수를 mathjax 식으로 표현
13131정성태10/3/20228171.NET Framework: 2052. C# - Windows Forms의 데이터 바인딩 지원(DataBinding, DataSource) [2]파일 다운로드1
... 16  17  18  [19]  20  21  22  23  24  25  26  27  28  29  30  ...