메타마스크 같이 클라이언트에서 Web3.js
API를 제공하는 지갑은 wallet_getPermissions
와 wallet_requestPermissions
함수를 제공하는 것을 권장한다.
이는 기존의 다른 웹서비스, 이를테면 페이스북이나 애플, 그리고 네이버, 카카오톡 같은 유저의 데이터를 갖고 있는 플랫폼 기업들에서 구현하는 권한 인증 API의 역할을 하게 한다.
여기서 타 웹서비스가 제공하는 Auth2.0
과의 커다란 차이는 권한의 발생이 서버가 아닌 클라이언트에서 이루어진다는 것이다.
EIP-2255 에서는 실질적으로 지갑(여기서 주로 사용할 메타마스크)에서 사용할 수 있는 web3 API들을 제한하는데에 초점을 둔다. 이를테면 현재 이용하고 있는 웹서비스를 신뢰 여부를 물어보고, 이 웹서비스를 통해 온체인에서 할 수 있는 일들을 화이트리스트 형식으로 정해둔다. 권한이 더 필요하다면 미리 지갑에 해당 계정에서 해당 메소드를 이용 여부를 사용자에게 물어보는 기능도 제공한다.
- 해당 계정에서 처리할 수 있는 메소드들의 리스트를 가져오는 일은
wallet_getPermissons
을 통해서 가능하다.- 해당 계정으로 새로운 메소드를 사용할 권한을 얻는 일은
wallet_requestPermissions
를 통해서 가능하다.
[계정의 주소값에 대한 접근 요청]
[접근 가능해진 계정]
위를 보면 어떤 주소값에서 어떤 메소드 사용이 허용되는지를 지갑 차원에서 관리하고 있다. 메소드 요청에 대해서 해당 계정이 권한을 부여한 경우가 없다면 사용자에게 승인 여부를 물어보거나 애초에 요청을 거절하게 될 것이다.
EIP-712
를 알아볼 것이다.(EIP-721
이 NFT) EIP-712
까지 살펴보고나면, 새로운 웹서비스의 인증 방법을 고민해볼 수 있을 것 같다.