JWTのデコードでエラープログラム日記SPAをつくることにしたんだけれども、APIの認証をどうしていいのかがいまいちわからない。APIに状態を持たせるのは良くないということで、セッションを使った認証ではなくJWTを使った認証にチャレンジしてみることにした。(とはいえ、あんまりそのメリットもよくわかってない。APIで認証のためにセッションを使うのと、tokenを使うのでなんか違いがあるのだろうか。認証以外の情報がtokenとしてどんどん増えていくことを想定してのtokenなのかな。何かの記事でAPIだとセッションが使えないみたいなことが書いてあったんだけれども、なんで使えないのかもよくわからない。自分のサイトでログイン画面でIDとパスワードを入力IDとパスワードで該当のユーザーが登録されていたら、ユーザーの情報をもとにtokenを生成しクライアントに渡す以降、サーバー側にAPIを投げる際にはtokenを付加して投げるサーバー側はtokenをデコードして、ユーザーが存在するかとか、不正なtokenじゃないかとかをチェックするみたいな感じなんだと思う、これが、GitHubとかTwitterとかの外部認証を用いた場合がいまいちよくわからない。なんとなくこんな感じだと思う。外部のサイトから、自分のサイトにtoken付きでリダイレクト自分のサイトでtokenを受け取り、ログイン用のAPIにtokenを渡してAPIを叩く。ログイン用のAPIで外部サイト(Githubとか)のユーザー情報を取得するようなAPIを叩く。取得したユーザー情報を自分のサイトのDBに登録して、さらにユーザー情報をもとにしたtokenを生成する以降は、自サイトのときと同じ。調べると、アクセストークンは、認証(誰か)ではなく認可(〜をしてよい)しかわからないので、そのまま認証に使うのはよくないよ的な記事がたくさんある。GitHub誰が、がわかるのは前述のアクセストークンを発行する使用のOAuthではなくOpenIDConnectなんだよ、とかもあるんだけれども、Githubを利用した認証と、OpneIDConnectの関係もよくわからない。GithubからIDトークンってもらえるのかしら。分かるまた、OpenIDConnectなのかOAuthの話なのかわからないけれども、自サイトから外部サイトにリダイレクトするときにstateっていうパラメータを発行しておいて、外部サイトから自サイトに戻るときにstateに変更がないかを調べていると思う。tech-lab.sios.jp上記のサイトで、stateの意味をわかりやすく書いてくれているんだけれども、APIでセッションを使わない場合、どう実装するのかが謎。Laravelの外部認証のライブラリを眺めてたんだけれども、セッションを使う場合と使わない場合で(stateless)で処理がわかれていて、使わない場合は、stateのチェックをしていないように見える。github.comちゃんと確認できてないのであれなんだけれども、仮にしてないとしたら、それでいいのだろうか。整理したいんだけれども、なかなか時間と気持ちがなく更新をさぼっていたのでしょうもないので、最後にしょうもない記事を書くことにした。JWTのtokenのデコードでエラーとあるAPIを叩く際の認証にJWTを使うことにした。環境はPHPで、以下のライブラリを使っていた。github.com四苦八苦してtokenを発行することに成功し、今度はそれをデコードして検証する機能を実装して、curlで検証していた。http://localhost:8000/api/1/usersしかし、コピペし忘れてたんだけれども、こんなエラーがでてしまった。JWSあれーと、JWTの中身をいろいろと見ていて、1時間ほど経過した際に気づきました。あれ、エラーメッセージのtokenの内容、途中で省略されてんじゃねえか!と。いうのも、Chormeのコンソールにtokenを出力して、確認してたんですが、長い文字列は省略されていたみたいです。コピペ元ちゃんと、JSONオブジェクトを展開したものを使いましょうというしょうもない話でした。関連記事2020-01-04ApacheでCGIを実行する仕組みをのぞいてみる過去にPHPで以下のコードを実行した場合、このprintの結果はど...2019-01-022018年の振り返りあけましておめでとうございます。»プロフィール30歳からWebやらなんやらを学び始めた人のブログです。(4)検索はてなブログをはじめよう!konoemarioさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。