[kr-dev] 계정에 다중 권한 설정하기
개요
- 계정에 권한 정보 추가를 통해 이후 내 계정의 권한 정보를 가지고 상대방의 계정을 통제?할 수 있습니다.
- 일반적으로 posting 키만 추가하는 것을 권장함.
- 2개 이상의 계정 정보를 추가 가능 ( A라는 계정과 B라는 계정이 C라는 계정을 동시에 포스팅 가능 / 단, 프로그래밍적으로 처리해야 됨 )
posting 권한
- A 계정에 wonsama 계정 추가 ( posting 권한 추가 )
- 이후 wonsama 계정의 posting 키를 가지고 A 의 계정으로 글을 작성할 수 있음. ( A 계정의 보팅 또한 가능해짐 )
posting + active 권한
- A 계정에 wonsama 계정 추가 ( posting, active 권한 추가 )
- 이후 wonsama 계정의 posting 키를 가지고 A 계정으로 글을 작성할 수 있음. ( A 계정의 보팅 또한 가능해짐 )
- 이후 wonsama 계정의 active 키를 가지고 A 계정의 돈을 송금 할 수 있음.
참조 ( in steemconnect )
- 스팀커넥트에서는 참고로 계정 생성 시 스팀커넥트가 소유주가 됩니다. (유저가 아니라) 그래서 posting 키를 해당 계정에 위임하더라도 안심 할 수 있는 것입니다. ( tasteem.app, steemeasy, dlive.app, busy.app )
- 또한 스팀커넥트는 posting 권한만 처리합니다.
( 물론 스팀커넥트 자체가 해킹당하면 뭐 어쩔 수 없지만 현재까진 그런적은 없으니 안심하셔도 될거에요.. )
관련 소스코드
/*
REF :
https://github.com/steemit/steem-js/issues/165
https://steemit.com/steem/@good-karma/steem-multi-authority-permissions-and-how-active-authority-works-part-2-f158813ec0ec1
https://steemit.com/piston/@xeroc/piston-how-to-use-it-for-multisignature-accounts
*/
const steem = require('steem');
const MY_ACCOUNT = 'my_account_name'; // 내 계정명
const MY_ACCOUNT_OWNER_KEY = '5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // 내 계정의 OWNER 키
const ADD_ACCOUNT = 'add_account_name'; // 추가 하려는 계정명
steem.api.getAccounts([ MY_ACCOUNT ], function(err, response){
if (response) {
const account = response[0];
const MY_JSON_META = account.json_metadata;
const MY_MEMO_KEY = account.memo_key;
let ownerAuth = account.owner;
let activeAuth = account.active;
let postingAuth = account.posting;
// 계정 권한을 추가한다
ownerAuth.account_auths.push([ADD_ACCOUNT, ownerAuth.weight_threshold]);
activeAuth.account_auths.push([ADD_ACCOUNT, activeAuth.weight_threshold]);
postingAuth.account_auths.push([ADD_ACCOUNT, postingAuth.weight_threshold]);
/*
* - steem.broadcast.accountUpdate 는 기본적으로 ACTIVE 권한을 필요로 함. (POSTING 바꿔도 ...)
* - OWNER 권한을 변경하고자 하는 경우에는 OWNER_KEY 정보가 필요
* - 이미 추가된 권한 정보는 또 추가 할 수 없음.
* - ownerAuth, activeAuth, postingAuth 의 값을 undefined로 설정하면 그대로 유지 됨
* - ownerAuth 정보는 1시간에 1번만 변경 가능
*/
steem.broadcast.accountUpdate( MY_ACCOUNT_OWNER_KEY, MY_ACCOUNT, ownerAuth, activeAuth,
postingAuth, MY_MEMO_KEY, MY_JSON_META, function(err, result) {
console.log(err, result);
});
}
});
![](https://steemitimages.com/400x0/https://cdn.steemitimages.com/DQmQ8HgVquH4MaHycVuwmaVCB14tjHsKWfQsHScJRYKq2Tt/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202018-06-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.37.51.png)
[그림] https://steemd.com 에서 확인한 계정 권한이 추가된 모습
스팀잇의 팀블로그(?)랄까요 그런거군요
네 그런것도 가능 하게 할 수 있습니다. ^^
물론 steemit.com의 로그인이 되는 것은 아니므로 프로그램적으로 처리해야 되는 점이 있긴 하지만 ...
어느정도 개발을 하실 수 있는 분이라면 이 또한 어렵지는 않은 문제인지라 ^^;
스팀커넥트에서 로그인해서 권한을 위임하는게 위 코드와 같은건가요?
소스코드 까지 확인하진 못했지만 맞을 거라 생각 합니다.
설명을 드리자면 ...
제가 스팀커넥트에서 계정을 만들어 봤습니다.
@wonsama.quiz 해당 계정의 정보를 steemd.com 에서 보면 steemconnect 권한이 3개 설정 된 것을 볼 수 있습니다.
이후 steemconnect를 하면 @wonsama.quiz에게 권한을 위임하지만, 스팀커넥트를 통한 계정 생성시 해당 계정의 개인키정보를 알려주지 않기 때문에 계정을 생성한 @wonsama 저 본인은 암호를 알 방법은 없고 이후 모든 권한은 steemconnect에서 처리 합니다.
스팀커넥트에서 제공하는 권한은 posting 입니다.
active 권한은 (송금, 스파임대) 등은 hot link를 통해 active key를 사용자로부터 별도로 입력받아 1회성으로 사용 합니다.
posting 권한은 세부적으로 나눠 최초 스팀커넥트 호출 시 comment, vote, options 등등 으로 배열형태로 입력 받아 해당 하위 권한을 스팀커넥트에서 처리합니다.
여기서 맹점? 이 스팀커넥트는 해당 정보를 get 빙식으로 받아 처리하므로 사용자가 주소정보를 약간 변경하면 해당 권한이 변경 되겠죠... 대신 이렇게 되면 권한이 축소된 경우 해딩 dapp에서 오류를 발생하게 되고여
참고로 스팀커넥트 로그인 이후 해당 토큰은 일빈적으로 localstorage에 보관이 되며 그때문에 로그인 장소가 다르면 또 로그인 하라 합니다.
하지만 지난번 유토피아 사태처럼 서버에 토큰을 보관한다면 해킹 시 대박 뒤통수 맞을 수 있겠죠...
여기까지가 제가 알고 있는 내용이네요 100% 보장은 아니지민 맞을 거에요..
자세한 설명 감사합니다. 조금 이해된것같습니다. 스팀커넥트가 아니라도 위임이 가능하긴 하군요! 신뢰도의 문제지만.? ?
그리고 스팀커넥트는 토큰을 통해 posting의 권한 중 초기 호출 시 요청한 권한의 일부를 위임 하는 것 입니다.
( 실제는 posting권한 전부지만, 이를 스팀커넥트에서 통제함, 그래서 별도의 sc2용 메소드가 있는 걸로 추측 하네요)
나중에 함 sc2에 대해 포스팅 해보도록 하겠습니다.
확인 좀 더 해서요 ^^
우와.... 처음 알게 된 사실인데 신기하네요. 한번 실험해봐야겠어요
한번 해보세요 ㅋ 잼나요
하나 털리면 연쇄적 도미노 현상이 일어나지 않을까 걱정 되네요.
일반적으로 sc2를 이용하는 경우 localstorage에 해당 token 정보를 기록하는 지라 ... 개인 PC에서 사용하는 경우는 거의 문제가 없다고 생각 됩니다, 게임방 같은 경우라면 물론 위험 합니다. (절대 게임방에서 비지, 스팀케이알, 가즈아 등의 사이트 접속하지 말기 바랍니다. 혹 누가 로컬스토리지에 있는 토큰 값을 적어 간다면 ... 털리는거죠 -_-; )
단, 서버에 sc2의 토큰 값을 저장하는 미친 사이트? 들은 조심해야 됩니다. 그런곳은 정말 위험할 수 있습니다. 서버가 털리면 답이 없고(토큰 유효시간1주일 동안), 또한 서버가 원하는 아무때나 내 허락없이 내 계정을 컨트롤 할 수 있으니까요...
또한 위에서 제가 소개한 방법은 뭐 믿는 사람끼리 계정 공유하는 방법인지라 그것도 그다지 문제되지는 않을거 같고여 ... 믿는 도끼에 발등 찍히면야 뭐 할 말이 없으니까요 =_=
위에서 보다 싶이 내 계정에 상대방 계정의 권한을 invoke(권한적용) 하는 경우인지라... 물론 revoke(권한회수) 또한 손쉽게 가능해서 ( 스팀커넥트 또한 손쉽게 권한 회수 가능 ) 우려하는 상황은 sc2를 털지 않는 한 없을 것으로 예상 됩니다.
개인적으로 우려되는 case는 하나가 있긴 한데... 예로 들면 sc2커넥트 페이지와 동일 화면을 구성하여 중간에서 active 키를 가로채는 경우죠 ... 홈페이지 또한 steemconect 와 같이 n하나 빼고 유사하게 만든다던가 이런식으로여 ... 이런 case라면 당할지도...
이런거는 진짜 잘 모르겠습니다 ㅠㅠ..
pairplay 가 kr-dev 컨텐츠를 응원합니다! :)