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만으로 어쩐지 할 수 없을까라고 생각하고 있습니다.
재미있는 방법을 생각해 낸 사람은 꼭 야마코에게 가르쳐 주세요! 할 수 있는지 모르겠습니다!
Reference
이 문제에 관하여(NEM을 사용한 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/koseki_yamaki/items/de67c6e0b9f84bbc53b5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<!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>
$(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";
}
}
);
}
Reference
이 문제에 관하여(NEM을 사용한 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/koseki_yamaki/items/de67c6e0b9f84bbc53b5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)