投稿アクセスなしのログイン
アプリによっては、Hive 上でその人が誰なのかを知るだけで十分です。そうしたアプリは、その人に代わって投稿も投票もブロードキャストもしません。Hivesigner は、投稿権限をいっさい使わずにそうしたアプリへ利用者をログインさせられます。利用者は Hive アカウントを管理していることを示し、あなたのアプリはその名前を知ります。このページでは二つの方法と、結果を安全に確認する手順を説明します。
二つの方法
- アプリアカウントあり: あなたのアプリは自分の Hive アカウントを持ち、
scope=loginを求めます。トークンにはあなたのアプリ名が入ります。 - アプリアカウントなし: 自分の Hive アカウントを持たないサイトは
redirect_uriだけを送ります。トークンにアプリ名は入りません。サイト側で自分で確認します。
どちらも利用者やあなたのアプリアカウントからの許可を必要としないため、利用者のアカウントは何も変わりません。Hivesigner はログインを投稿キーで署名します。端末にそのアカウントの投稿キーがない場合はアクティブキーで署名します。
アプリアカウントあり
-
アプリを登録します。その Hive アカウントを作り、コールバックを登録します。クライアントシークレットも @hivesigner への許可も不要です。
-
利用者を次の場所へ送ります。
https://hivesigner.com/oauth2/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=login&state=STATE -
利用者には「APP にログイン」がスコープ「アカウントのユーザー名の参照」とともに表示されます。利用者はログインを選びます。
-
Hivesigner はあなたのコールバックへリダイレクトします。
REDIRECT_URI?state=STATE&access_token=TOKEN&expires_in=604800&username=USERNAME -
stateを照合し、それからトークンを確認します。これはあなたのアプリ名が入ったloginトークンなので、どちらの方法でもかまいません。- これで
GET /api/meを呼ぶとuserにアカウント、scopeに["login"]が返るので、そのあとトークンを復号してtypeとappを確認する(API に尋ねる)。 - または
type: 'login'とあなたのアプリ名で自分で確認する。
- これで
login トークンではブロードキャストできません。/api/broadcast はそれで送られた操作をすべて拒否します。
アプリアカウントなし
-
利用者を、
redirect_uriを付けclient_idを付けずに承認 URL へ送ります。https://hivesigner.com/oauth2/authorize?redirect_uri=REDIRECT_URI&state=STATEコールバックは
https://か、ループバック上のhttp://(localhost、127.0.0.1、[::1])でなければなりません。登録する一覧はありません。ここでは Hivesigner はscopeとresponse_typeを無視します。応答はつねにログイン用トークンです。 -
利用者には「HOST があなたの Hive ユーザー名の確認を求めています。」が表示されます。HOST はあなたのコールバックのホストです。利用者はログインを選びます。
-
Hivesigner はあなたのコールバックへリダイレクトします。
REDIRECT_URI?state=STATE&access_token=TOKEN&expires_in=604800&username=USERNAME -
stateを照合し、それからトークンを自分で確認します。API はアプリ名の入っていないトークンを受け付けないため、あなたのサーバーが署名をアカウントの鍵と突き合わせます。自分で確認するを、type: 'login'で、appなしの条件で参照してください。
コールバックがウェブアドレスでない場合や、ループバック以外で素の http:// の場合、Hivesigner はリクエストを拒否し、その理由を利用者に伝えます。
どちらを使うか
| アプリアカウントあり | アプリアカウントなし | |
|---|---|---|
| 利用者に見えるもの | あなたのアプリの名前、画像、Hive アカウント | あなたのサイトのホストだけ |
| 準備 | コールバックを登録した Hive アカウント | なし |
| トークンが示すもの | あなたのアプリ | アプリなし |
| トークンの確認方法 | /api/me または自前のコード |
自前のコード |
| あとから投稿アクセスへ | 同じアカウントで posting を求め、@hivesigner に許可を与える |
まずアプリアカウントが必要 |
できるならアプリアカウントを使ってください。利用者にあなたのアプリの名前と画像が見えます。サーバーは他のアプリ向けに作られたトークンを拒否できます。のちに同じアカウントのまま投稿アクセスへ進めます。
サイトが Hive アカウントを持たず、持つつもりもない場合は二つ目の方法を使ってください。
ログインを安全に確認する
stateでリクエストを結び付けます。 ログインごとにランダムな値を作り、利用者のセッションに保存し、コールバックで照合し、一度だけ使います。state でリクエストを守るを参照してください。- 種類を確認します。
signed_message.typeがloginのものだけを受け付けます。コードや更新トークンはログインではありません。 - アプリを確認します。 アプリアカウントがある場合、
signed_message.appはあなたのアプリでなければなりません。ない場合はappがまったくないはずです。 - 経過時間を確認します。 トークンはリダイレクト直後に確認するので、その
timestampから数分以内のものだけを受け付けてください(たとえば 5 分、時計のずれ 1 分を見込んで)。 - トークンは一度だけ使います。 確認に成功したら自分のセッションを開始し(たとえば httpOnly のクッキー)、Hivesigner のトークンは捨ててください。受け付けたトークンは、経過時間の確認を通らなくなるまで記録しておきます。再び現れたトークンは拒否してください。
- トークンをログに残しません。 トークンはコールバックのクエリ文字列で届きます。トークンを安全に扱うを参照してください。
例
https://hivesearcher.com や https://openhive.chat のようなサイトは、検索やチャットなどチェーン外にとどまる機能のために、Hive アカウントでのログインを提供しています。必要なのはその人が誰かということだけです。