bad signature

에러가 발생한 경우 아래 정보를 모두 제공해주시면 보다 정확한 답변이 가능합니다!

  • SDK 버전 : 5.0.0
  • 에러 코드 : BadUnauthorizedException
  • 스테이터스 코드 : 401
  • 에러메시지 : bad bad,signature,잘못된,signature,입니다, 잘못된 bad,signature,잘못된,signature,입니다 입니다

미정의 스키마 테이블의 정보를 업데이트시에 해당 에러가 발생합니다.
서버 공통 에러로 Client(게임)와 Server(뒤끝 콘솔) 간 시그니처가 일치하지 않는 경우 라고 보여지는데,
해당사항은 언제, 왜 발생하는지. 그리고 어떻게 수정해야하는지 궁금합니다.
시그니쳐키는 확인해봤는데 이상없는것 같습니다. 해당 요청을 재시도하면 대부분 성공합니다.

안녕하세요 개발자님

param에 서버에서 인식할 수 없는 특수문자가 포함되어 있거나

소수점 3자리 이상의 숫자가 포함된 경우에도 해당 오류가 발생할 수 있습니다.

또한 한번에 비동기 요청을 여러 개 보내는 경우에도 해당 에러가 발생할 수 있습니다.
(한번에 비동기 함수 3,4개를 동시에 요청하는 경우)

그리고 에러가 발생하는 param 값을 공유해주실 수 있으신가요??

어떤식으로 공유해야되나요??

Param의 내용을 알 수 있는 코드나 내용이 들어간 Json값을 공유해주시면 될 거 같습니다.

ex1)

Param param = new Param();
param.add("str",1);
param.add("int",1);
Backend.BMember.Insert("table",param);

ex2)

"lunch":{
                "M":{
                    "how much":{
                        "N":"1"
                    },
                    "when":{
                        "S":"the day before yesterday"
                    },
                    "what":{
                        "S":"drink coffee"
                    }
                }
            },

Param[] saveParam = new Param[num];

    for (int i = 0; i < num; i++)
    {
        saveParam[i] = local_inventory[i];
    }

    Param data = new Param();
    data.Add(myInven, saveParam);
    ServerMNG.Instance.CheckInternet();

    SendQueue.Enqueue(Backend.GameInfo.Update, itemTable, ServerMNG.Instance.inDate_item, data, updateComplete =>
    {
        ServerMNG.Instance.BackendResult(updateComplete, Backend.GameInfo.Update, itemTable, ServerMNG.Instance.inDate_item, data);
    });

Param 배열을 저장하는 과정에서 해당 문제가 발생합니다.

Backend.GameInfo.Update에 인자값으로 들어가는 data 안에 어떤 값이 들어가는지 확인 가능할까요?
특히 saveParam안에 어떤 자료형들이 들어가는지 공유해주시면 감사하겠습니다.(실제 값들도 함께 주시면 감사하겠습니다)

또한 saveParam안에 들어가 있는 값중에 double형이 있고, 소수점 3자리 이상이 있을 경우에도 해당 에러가 발생할 수 있으니 이부분도 확인해주시면 감사하겠습니다.

SaveParam의 구성
{
“item_part”: “0”,
“item_upgrade”: “2”,
“item_id”: “6”,
“item_isEq”: “1”,
“item_isFirst”: “0”,
“item_star”: “5”,
“item_tier”: “4”,
“item_guid”: “ca8395fb-43b5-4b2d-8045-8349050a1fdb”
},
이러한 형태고 맨아래 guid는 스트링의 형태고, 나머지는 인트형입니다.

이상한 점은 같은 Update 명령을 실패시 한번 더 시도하면 대부분 성공한다는 점입니다.

확인 및 테스트본 결과,
문제가 발생한 만한 곳은 없는것으로 보입니다.

그러나 서버 기록을 살펴보던 중, 성공했을 때와 실패했을 때의 값이 서로 다른 것으로 확인이 되는데요.(마지막 1,2개의 데이터에 item_guid가 없음)

한번 더 같은 Update 명령을 내렸을 때, 완전히 같은 객체를 업데이트하나요? 혹은 Update함수 호출 이전에 조건에 따라 Param의 값이 변경되는 코드가 있나요?

같은 객체를 업데이트 하는데… 마지막 데이터에 guid가 없을때 실패를 하는건가요??

콘솔에서 해당 데이터를 보면 이런식으로 guid만 붉게 나오는것과 관련이 있을까요??

아뇨, string 자료형은 붉은색으로 표시하는 것이므로 관련은 없습니다.

에러 bad signature가 발생하는 데이터들은 마지막이나 뒤에서 두번째로 들어오는 데이터가 없거나( {}로 들어옴) 일부가 비어져있는 체로 나올 때 발생하는 것으로 확인됩니다.

자세한 부분은 메세지로 드리겠습니다.