Avatar
0
monkey Enlightened
monkey Enlightened
Sử dụng tài khoản ethereum để login cho các ứng dụng khác
Ethereum nói riêng hay blockchain nói chung đều sử dụng <strong>chữ ký số</strong> để ký và xác thực giao dịch, vậy nên chúng ta cũng có thể tận dụng cơ chế này cho phép người dùng có địa chí tài khoản etherum tạo được tài khoản trên hệ thông của chúng ta, các bước bao gồm: <p> </p> <ol start="1"> <li>Người dùng tạo một mật khẩu bất kỳ, chuyển mật khẩu này về dạng hex, sau đó ký với password này, ví dụ: </li> </ol> <p> </p> <pre> // 0x70617373776f7264 là hex của 'password' personal.sign("0x70617373776f7264", "0x3c31b4b9d6c24bad29498f99aaa6914231362c7f") </pre> <p> </p> <p> Kết quả chúng ta sẽ nhận được 1 chuỗi ở phía client: <code>0xd8591710d40164116769731b960076fc901a05c7b0acec758e40dd3e6819a1d858540bc923db93f064c987ead6c6c41d62fcd6d874c06eba7092c23bd72631d61c</code> </p> <p> </p> <ol start="2"> <li>Tiếp theo client sẽ gửi lên server cả mật khẩu và chuỗi vừa nhận được </li> <li>Server sẽ giải mã chuỗi vừa nhận được với mật khẩu, và chúng ta sẽ nhận được tài khoản của người dùng, ví dụ: </li> </ol> <p> </p> <pre> personal.ecRecover("0x70617373776f7264", "0xd8591710d40164116769731b960076fc901a05c7b0acec758e40dd3e6819a1d858540bc923db93f064c987ead6c6c41d62fcd6d874c06eba7092c23bd72631d61c") </pre> <p> </p> <p> Kết quả chúng ta nhận được ở server: <code>0x3c31b4b9d6c24bad29498f99aaa6914231362c7f</code>. </p> <p> </p> <p> Tuy nhiên chúng ta thường có nhu cầu tạo tài khoản cho user vói nhiều hơn thông tin hơn, ví dụ: </p> <p> </p> <pre> { "username": "dzung", "password": "123456", "email:": "dung@youngmonkeys.org" } </pre> <p> </p> <ol start="1"> <li>Chúng ta có thể chuyển thông tin này thành dạng hex thế này: <code>0x7b0d0a202022757365726e616d65223a2022647a756e67222c0d0a20202270617373776f7264223a2022313233343536222c0d0a202022656d61696c3a223a202264756e6740796f756e676d6f6e6b6579732e6f7267220d0a7d</code> </li> </ol> <p> </p> <ol start="2"> <li>Client sẽ ký nó: </li> </ol> <p> </p> <pre> personal.sign("0x7b0d0a202022757365726e616d65223a2022647a756e67222c0d0a20202270617373776f7264223a2022313233343536222c0d0a202022656d61696c3a223a202264756e6740796f756e676d6f6e6b6579732e6f7267220d0a7d", "0x3c31b4b9d6c24bad29498f99aaa6914231362c7f") </pre> <p> </p> <p> Kết quả client sẽ nhận được chuỗi: <code>0x120f5a9c0bff5d7997ac166960c2bbf7ea8c44cbe9c3640c17017ebe33f864327b7e8fa1b92edefc5e04dbf4f4431c73fde0bbe107d4ff87d6f361a961d5d8fb1c</code> </p> <p> </p> <ol start="3"> <li>Client gửi cả chuỗi hex và chuỗi vừa nhận được lên server </li> <li>Server sẽ giải mã chuỗi vừa nhận được: </li> </ol> <p> </p> <pre> personal.ecRecover("0x7b0d0a202022757365726e616d65223a2022647a756e67222c0d0a20202270617373776f7264223a2022313233343536222c0d0a202022656d61696c3a223a202264756e6740796f756e676d6f6e6b6579732e6f7267220d0a7d", "0x120f5a9c0bff5d7997ac166960c2bbf7ea8c44cbe9c3640c17017ebe33f864327b7e8fa1b92edefc5e04dbf4f4431c73fde0bbe107d4ff87d6f361a961d5d8fb1c") </pre> <p> </p> <p> Kết quả server sẽ nhận được: <code>0x3c31b4b9d6c24bad29498f99aaa6914231362c7f</code> </p> <p> </p> <ol start="5"> <li>Server sẽ lưu lại toàn bộ thông tin vào database và lần kế tiếp user sẽ có thể đăng nhập qua username, email hay địa chỉ ví đều được</li></ol>
Answer