NEM을 사용한 인증

소개



TipAssist라는 Chrome 확장을 만드는 야마코라고합니다.
PC에서 tipnem 사용하는 사람은 꼭 설치해보세요 (노골적인 홍보).
(tipbot 폐지에 따라 비공개가 되었습니다)

NEM 활용법



나는 직접 NEM에 대한 개발을 한 적이 없기 때문에 (TipAssist는 어디까지나 트위터에서 텍스트를 괴롭히는 것만으로),
상상이라고 생각해, 나머지는 TL의 사람으로부터 나온 지견을 바탕으로 조금 말하기로 합니다.

우선 NEM의 유저측에 있어서 특징적인 기능은 대략 이하와 같다.
· 모자이크 (토큰) 만들기
・아포스티유(증명서 발행)
· 수확
・Voting(투표)

이 중에서도 모자이크의 제작은 이질적이고 응용성이 높습니다.
그래서 모자이크의 내용을 다룹니다.

모자이크 활용



모자이크 인증

지정된 모자이크를 가진 사람만 액세스할 수 있는 페이지입니다.



만들어 보았다.

파일 구성





index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>認証が必要なページ</title>
    <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
    <script type="text/javascript" src="js/main.js"></script>
  </head>
  <body>
    <p id="status"></p>
    <p id="mosaic"></p>
  </body>
</html>


main.js
$(function(){
    var nem = prompt("NEMアドレスを入力してください").replace(/-/g,"");
    status("104.238.161.61:7890", nem,"nem_games.ammo:9mm");
});

function status(supernode,nemAddress,mosaic){
  $.getJSON(
    "http://"+ supernode +"/status", //リクエストURL
    null,       //送信データ
    function(data, status) {
      if(data.code == 6){
          $('#status').text("SN "+ supernode+"は正常に動作している");
          // getBalance(supernode,nemAddress);
          getMosaic(supernode,nemAddress,mosaic);
      }else{
          $('#status').text("SN "+ supernode +" に何らかの障害あり");
          console.log(data);
      }
    }
  );
}


//モザイク一覧
function getMosaic(supernode,nemAddress,mosaic){
  $.getJSON(
    "http://"+ supernode+"/account/mosaic/owned?address=" + nemAddress, //リクエストURL
    null,       //送信データ
    function(data, status) {
      mosaics = mosaic.split(":");
      hasflg = false;
      data.data.forEach(function(v, i, a){
        if(v.mosaicId.namespaceId == mosaics[0] && v.mosaicId.name == mosaics[1]){
          if(v.quantity > 1){//数量指定
            $('#mosaic').text(mosaic +"" + v.quantity + "個持っています。ありがとうございます");
          }else{
            $('#mosaic').text(mosaic +"" + v.quantity + "個持っていますがたりません");
          }
          hasflg = true;
        }
      });
      if(hasflg == false){
        alert(mosaic+ "をお持ちでない人にはお見せ出来ません!");
        window.location.href = "https://google.com";
      }

    }
  );
}



실행 결과





그러나, NEM 주소 뿐이라면, 다른 유저도 알 수 있는 정보 때문에, 간단하게 스푸핑이 생겨 버린다.
그렇다면이 예라면 이전 문제는 놓치십시오.



인증까지의 순서는 이하와 같다.

1. 인증 주소로 수 XEM 보내기
2. 인증용 주소에서 암호화된 메시지로 패스워드를 보내 온다(사용자 등록 완료)
3. 인증이 필요한 페이지로 이동하여 NEM 주소와 비밀번호를 입력
4. 그 NEM 주소로 지정된 모자이크를 소지하고 있으면 인증(yay!)

이 인증 방법을 여러가지 사용하면 범용성이 높을 것 같네요!

다만, 이 인증 방식을 특정의 서버에 의존한 시스템으로 하는 것이 아니라, 어디까지나 NEM만으로 어쩐지 할 수 없을까라고 생각하고 있습니다.
재미있는 방법을 생각해 낸 사람은 꼭 야마코에게 가르쳐 주세요! 할 수 있는지 모르겠습니다!

좋은 웹페이지 즐겨찾기