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

비밀번호

댓글 작성자
 




1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13482정성태12/13/20232896닷넷: 2183. C# - eFriend Expert OCX 예제를 .NET Core/5+ Console App에서 사용하는 방법 [2]파일 다운로드1
13481정성태12/13/20232281개발 환경 구성: 693. msbuild - .NET Core/5+ 프로젝트에서 resgen을 이용한 리소스 파일 생성 방법파일 다운로드1
13480정성태12/12/20232649개발 환경 구성: 692. Windows WSL 2 + Chrome 웹 브라우저 설치
13479정성태12/11/20232335개발 환경 구성: 691. WSL 2 (Ubuntu) + nginx 환경 설정
13477정성태12/8/20232526닷넷: 2182. C# - .NET 7부터 추가된 Int128, UInt128 [1]파일 다운로드1
13476정성태12/8/20232261닷넷: 2181. C# - .NET 8 JsonStringEnumConverter의 AOT를 위한 개선파일 다운로드1
13475정성태12/7/20232323닷넷: 2180. .NET 8 - 함수 포인터에 대한 Reflection 정보 조회파일 다운로드1
13474정성태12/6/20232172개발 환경 구성: 690. 닷넷 코어/5+ 버전의 ilasm/ildasm 실행 파일 구하는 방법 - 두 번째 이야기
13473정성태12/5/20232377닷넷: 2179. C# - 값 형식(Blittable)을 메모리 복사를 이용해 바이트 배열로 직렬화/역직렬화파일 다운로드1
13472정성태12/4/20232191C/C++: 164. Visual C++ - InterlockedCompareExchange128 사용 방법
13471정성태12/4/20232269Copilot - To enable GitHub Copilot, authorize this extension using GitHub's device flow
13470정성태12/2/20232563닷넷: 2178. C# - .NET 8부터 COM Interop에 대한 자동 소스 코드 생성 도입파일 다운로드1
13469정성태12/1/20232283닷넷: 2177. C# - (Interop DLL 없이) CoClass를 이용한 COM 개체 생성 방법파일 다운로드1
13468정성태12/1/20232224닷넷: 2176. C# - .NET Core/5+부터 달라진 RCW(Runtime Callable Wrapper) 대응 방식파일 다운로드1
13467정성태11/30/20232315오류 유형: 882. C# - Unhandled exception. System.Runtime.InteropServices.COMException (0x800080A5)파일 다운로드1
13466정성태11/29/20232489닷넷: 2175. C# - DllImport 메서드의 AOT 지원을 위한 LibraryImport 옵션
13465정성태11/28/20232240개발 환경 구성: 689. MSBuild - CopyToOutputDirectory가 "dotnet publish" 시에는 적용되지 않는 문제파일 다운로드1
13464정성태11/28/20232374닷넷: 2174. C# - .NET 7부터 UnmanagedCallersOnly 함수 export 기능을 AOT 빌드에 통합파일 다운로드1
13463정성태11/27/20232302오류 유형: 881. Visual Studio - NU1605: Warning As Error: Detected package downgrade
13462정성태11/27/20232342오류 유형: 880. Visual Studio - error CS0246: The type or namespace name '...' could not be found
13461정성태11/26/20232377닷넷: 2173. .NET Core 3/5+ 기반의 COM Server를 registry 등록 없이 사용하는 방법파일 다운로드1
13460정성태11/26/20232330닷넷: 2172. .NET 6+ 기반의 COM Server 내에 Type Library를 내장하는 방법파일 다운로드1
13459정성태11/26/20232302닷넷: 2171. .NET Core 3/5+ 기반의 COM Server를 기존의 regasm처럼 등록하는 방법파일 다운로드1
13458정성태11/26/20232312닷넷: 2170. .NET Core/5+ 기반의 COM Server를 tlb 파일을 생성하는 방법(tlbexp)
13457정성태11/25/20232257VS.NET IDE: 187. Visual Studio - 16.9 버전부터 추가된 "Display inline type hints" 옵션
13456정성태11/25/20232556닷넷: 2169. C# - OpenAI를 사용해 PDF 데이터를 대상으로 OpenAI 챗봇 작성 [1]파일 다운로드1
1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...