Connectを使いたい2022/01/10に公開・約10,300字ツイートRustOIDC#axumtechやりたいことAxumでOAuthを使うサンプルはあります。Connectではないのです。Connectを利用し、StateやNonce、PKCEも使って正しく検証を行いたいと思います。今回はopenidconnectクレートを使って実装しました。Connectを使うStateやNonce、PKCEでの検証を行う簡単なユースケースであれば再利用しやすいような形にするといったことを考えました。ソースコードメイン部分OpenIdConnectUtilというのを作って、AddExtensionLayerで登録しておきます。関数signin_redirectやsample_finishでOpenIdConnectUtilのメソッドを呼び出す形です。Ok(())}呼び出される関数URLに紐づけられて呼び出される関数です。Connectでのリダイレクト先のURLを作成リダイレクトしたり、認証が終わった際のデータ取得や検証を行います。実際の処理のほとんどはOpenIdConnectUtilに実装されています。signin_redirect関数については、実際にWebアプリケーションを作ったとしてもそのまま再利用可能だと思います。sample_finish関数については実際のWebアプリケーションの開発に際して、ユーザー情報をストレージに保存したり、セッション維持の仕組みを入れたりなどが必要になってくるかと思います。Ok("ログインできました".to_string())}OpenIdConnectUtilの実装https://docs.rs/openidconnect/2.2.0/openidconnect/#getting-started-authorization-code-grant-w-pkceこちらにStateやNonce、PKCEなどしっかり検証を行っているサンプルがありますので、基本的にはこちらに書いてある処理で問題ありません。こちらのサンプルではWebアプリ上に実装しているものではなく、このままでは使用しづらいのです。今回Axumで使えるようにするため、下記のようなものを作っています。StateやNonce,PKCEの情報はブラウザのCookieにmagic_cryptを使って暗号化して保存しています。エラーは適当にすべてanyhow::Errorにしてしまってるので、これでいいのかな?とか思ったりもするのですが、Rust初心者ということで大目に見ていただければ・・・。Webも軽く触った事ありますが、こちらの方が個人的にはとっつきやすいです。悩む量が少なくて済んだというか・・・。エコシステム的に周りのライブラリがそろってないので、その辺は辛いかなと思ったりしています。非同期のライブラリがTokioなので、非同期関係で困ることはあまりなさそうに思います。Webの場合その辺が解決できなくて困ったりしたことがそれなりにありました。個人的には今後も使っていきたいと思うWebフレームワークだと思っています。ソースコードはこちらにあります。https://github.com/saitoooo/sample_axum_oidcツイートうぽぽんド三流おっさんITエンジニアです。バッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフト券が還元されます。約10,300字うぽぽんド三流おっさんITエンジニアです。思った事などZennエンジニアのための情報共有コミュニティAboutZennについて運営会社お知らせ・リリースGuides使い方Publicationよくある質問LinksTwitterGitHubメディアキットLegal利用規約プライバシーポリシ。