Resp Api 인가 코드 질문입니다

문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.


개발 환경은 유니티 2021.3.1f1 이고 ios xcode 14.3.1 버전입니다.
앱 id는 : 870179

REST API 키 : beac02127d170c4783e25edef2585ab5

Redirect URI : https://skin-10.kr/app/kakaologintoken 사용해서 개발 하고 있습니다.

동의하고 넘어가면 result : 성공 나오고 content에 홈페이지 주소 ?code= 뒤에 값들이 나오는데 ios 빌드 해서 테스트 하면 똑같이 나오는데 인가 코드가 없다고 나오는데 도와주시면 감사합니다.

[HttpGet]
        public string kakaologintoken()
        {
            string result = string.Empty;
            string content = string.Empty;
            JData json = new JData();
            try
            {
                // Request.QueryString을 사용하여 code 파라미터를 가져옵니다.
                string authcode = Request.QueryString["code"];
                // authcode가 null 또는 빈 문자열인 경우 처리
                if (string.IsNullOrEmpty(authcode))
                {
                    result = "인가 코드가 없습니다.";
                    content = "";
                }
                else
                {
                    result = "성공";
                    // 인가 코드를 content 변수에 저장합니다.
                    content = authcode;
                }
            }
            catch (Exception ex)
            {
                result = string.Format("{0}", ex.Message);
            }           
            json.Result = result;
            json.Content = content;
            return JsonConvert.SerializeObject(json);
        }

서버에서 가져오는 소스코드입니다.

안녕하세요.

카카오 로그인 후, code 값을 정상 전달 드렸습니다.

아래 코드로 파라미터 확인 가능하실까요?

string authcode = HttpContext.Request.Query[“code”];

HttpContext.Request.QueryString 으로는 안되는거죠?

using Microsoft.AspNetCore.Http;
을 선언 하고 패키지를 설치하고 해도 CS1061:HttpRequestBase에 ‘Query’ 에 대한 정의가 포함되어 있지 않다고 나와있어서 HttpContext.Request.Query 못사용 하는 것 같습니다.

죄송합니다. 잘못 안내 드렸습니다. 코드에 문제 없습니다.
재현 가능한 URL 부탁드립니다.

답변 해주신 대답의 대해서 이해를 못해서 그런데 혹시 Redirect URI 주소가 잘못되었다는 말씀이신가요?

안녕하세요.

서비스에서 코드값 정상 처리 가능하시고, 카카오에서도 코드를 해당 주소로 전달하였습니다.
때문에 원인 파악을 위해서 직접 재현해 보고 싶은데요 재현가능한 URL(카카오 로그인하는 화면) 제공 부탁드립니다.

https://kauth.kakao.com/oauth/authorize?response_type=code&client_id=beac02127d170c4783e25edef2585ab5&redirect_uri=https://skin-10.kr/app/kakaologintoken&service_terms=service_00001,service_00002 로 접근하고 있습니다

혹시 다른 코드도 필요하다고 말씀하시면 말씀 해주시면 감사합니다.

위 조소로 정상 동작하는 것을 확인하였습니다.
여전히 진행되지 않으시다면, 재현 영상 및 네트워크 로그 같이 첨부 부탁드립니다.

카카오 로그인.zip (2.4 MB)
영상 알집입니다.

영상에서도 성공으로 나오는데 어떤게 문제인가요?
그리고, 영상 속 서버는 IIS 입니다만, 첨부이미지는 xcode 로그입니다.
서비스측 IIS 서버로 인가코드가 전달되었는데 xcode 에서 해당 로그를 확인 하시는 이유가 어떻게 될까요?

유니티 ios 빌드해서 xcode로 실행하는거 아닌가요? 유니티에서 카카오 로그인 클릭 했을 때

Application.OpenURL(Config.KakaoAuthURL + Config.RespApiKakaoKey + "&redirect_uri=" + Config.redirectURL + "&service_terms=" + Config.kakaoScope1 + "," + Config.kakaoScpoe2);

오픈이 되고

 private void OnApplicationFocus(bool hasFocus)
    {
        Debug.Log("hasFocus : " + hasFocus);
        if (hasFocus)
        {
            StartCoroutine(Service.IosKakaoCodeGet("kakaologintoken"));
        }
    }


public static IEnumerator IosKakaoCodeGet(string uri)
    {
        UnityWebRequest request = UnityWebRequest.Get(string.Format("{0}/{1}", Config.redirectURL, uri));
        yield return request.SendWebRequest(); // 응답을 기다림
        if (request.result == UnityWebRequest.Result.Success)
        {
            string result = request.downloadHandler.text;
            Debug.Log(result);
            switch(uri)
            {
                case "kakaologintoken":
                    JData data = JsonUtility.FromJson<JData>(result);
                    SectionUser.Instance.GetCodeKakao(data);
                    break;
            }                    
        }
        else
        {
            Debug.Log(request.error);
        }
    }

Debug.Log(result); 의 결과가 xcode에서 출력이 되어서 xcode 사진을 보여드렸습니다.

아 GetCodeKakao의 소스코드는

internal void GetCodeKakao(JData data)
    {
        if(data.Result == "성공")
        {
            Config.kakaoAccessCode = data.Content;
            RequestAccessToken(Config.kakaoAccessCode);
        }
    }

이런식으로 되어있습니다.

구현 내용을 이해하지 못하였습니다.

Application.OpenURL(...

유니티에서 브라우저를 열어 카카오 로그인 웹페이지로 이동하셨고, 해당 브라우저에서 인가코드를 IIS 서버로 정상 전달 드렸고, 이대로 해당 로직은 완료된것으로 보입니다.
하지만, 이 과정과 별도로 접근토큰을 가져오는 로직을 첨부해 주셨는데, 이 로직이 무엇을 어떻게 구현하고자 하시는지 이해하기 어렵습니다.

IIS 서버에서 발급받은 접근토큰을 따로 유니티에서 get하기 위한 코드인가요?
그렇다면 Application.OpenURL(... 의 정상 종료 시점을 알수 없을텐데 어떤 구현을 하고자 하신건가요?

넵 정상 종료 시점은 우선 플레이어가 다시 게임 화면으로 돌아가는 것을 알 기 위해서

private void OnApplicationFocus(bool hasFocus) //플레이어가 포커스를 받거나 잃을 때 모든 게임 개체로 전송
{
}
위 함수로 제어를 하고 있습니다.

IIS서버가 인가코드를 정상 전달 받았지만, 그 후 접근토큰 발급 이력이 없습니다.

게임으로 돌아가 접근 토큰을 가져오려해도 발급 받지 않아서 처리하지 못하시는것 같습니다.
IIS서버에서 접근토큰 발급 받아 놓으신 뒤, 이후 게임측 요청에서 전달해야 할것으로 보입니다.

하지만, 현재 운영정책상 게임은 디벨로퍼스 제공 API를 이용하실 수 없습니다.
게임 서비스에서 오픈 API를 사용하길 원하신다면 카카오게임즈를 통해 문의 부탁드립니다.

운영정책 (https://developers.kakao.com/terms/latest/ko/site-policies)

제3조 (서비스 이용이 제한되는 카테고리)
아래 각 호의 어느 하나에 해당하는 경우 서비스 이용이 제한됩니다.

  • 아 래
  1. 게임 애플리케이션, 웹
  2. 게임 관련 애플리케이션, 웹 (사전예약, 리워드 등)
  3. 가상자산 관련 서비스 (가상자산 거래, 보관 및 예치 등의 서비스를 제공하는 애플리케이션, 웹)

그럼 서버에서 인가 코드 그리고 토큰 받기 까지 전부다 처리를 해줘야한다는 말씀이신가요?

아 접근 토큰은 유니티에서 서버로 post 하고 있습니다 우선 서버에서 처리하는 것은 인가 코드만 get 해서 유니티로 가져온 다음 유니티에서 인가 코드를 가지고 접근 토큰을 활용 하려고 하고 있습니다.