/// <summary> /// 현재 설정으로 유효한 토큰을 확보합니다. /// </summary> /// <returns>토큰 정보</returns> public async Task <IamportToken> AuthorizeAsync() { ThrowsIfDisposed(); var input = new IamportTokenRequest { ApiKey = options.ApiKey, ApiSecret = options.ApiSecret }; // TODO: 인증 코드는 UsersApi와 중복된 부분임. // 별도로 빼는 방법이 있을지? var url = ApiPathUtility.Build(options.BaseUrl, UsersGetTokenPath); var httpRequest = new HttpRequestMessage(HttpMethod.Post, url); httpRequest.Content = new JsonContent(input); var response = await RequestAsync <IamportToken>(httpRequest); if (response.Code != 0) { throw new IamportResponseException(response.Code, response.Message); } var token = response.Content; lock (tokenLock) { httpClient.DefaultRequestHeaders.Remove(options.AuthorizationHeaderName); httpClient.DefaultRequestHeaders.Add(options.AuthorizationHeaderName, token.AccessToken); CurrentToken = token; } return(token); }
public async Task GetTokenAsync_throws_UnauthorizedAccessException_with_invalid_key_and_secret() { // arrange var client = GetMockClient(); var sut = new UsersApi(client); var request = new IamportTokenRequest { ApiKey = "invalid", ApiSecret = "invalid" }; // act/assert await Assert.ThrowsAsync <UnauthorizedAccessException>( () => sut.GetTokenAsync(request)); }
public async Task GetTokenAsync_throws_UnauthorizedAccessException_with_empty_or_null(string key, string secret) { // arrange var client = GetMockClient(); var sut = new UsersApi(client); var request = new IamportTokenRequest { ApiKey = key, ApiSecret = secret }; // act/assert await Assert.ThrowsAsync <UnauthorizedAccessException>( () => sut.GetTokenAsync(request)); }
/// <summary> /// 주어진 아임포트 토큰 요청을 인증하고 결과 토큰을 반환합니다. /// 인증에 실패하거나 입력 정보에 문제가 있을 경우 예외를 발생시킵니다. /// 이 API 호출은 내부 HttpClient의 Authorization 헤더를 설정하지 않습니다. /// 단지 요청한 토큰 정보에 대한 응답을 반환할 뿐입니다. /// </summary> /// <param name="request">아임포트 토큰 요청</param> /// <seealso>https://api.iamport.kr/#!/authenticate/getToken</seealso> /// <returns>인증된 아임포트 토큰</returns> public virtual async Task <IamportToken> GetTokenAsync(IamportTokenRequest request) { var iamportRequest = new IamportRequest <IamportTokenRequest> { RequireAuthorization = false, ApiPathAndQueryString = $"{BasePath}/{UsersGetTokenPath}", Content = request, Method = HttpMethod.Post, }; var response = await client.RequestAsync <IamportTokenRequest, IamportToken>(iamportRequest); if (response.Code != 0) { throw new IamportResponseException(response.Code, response.Message); } return(response.Content); }
public async Task GetTokenAsync_returns_token() { // arrange var client = GetMockClient(); var sut = new UsersApi(client); var request = new IamportTokenRequest { ApiKey = "key", ApiSecret = "secret" }; // act var result = await sut.GetTokenAsync(request); // assert Assert.False(string.IsNullOrEmpty(result.AccessToken)); Assert.True(result.ExpiredAt >= DateTime.UtcNow); }