BEAR.Sunday 上で実装した認証機能をライブラリ化しました。
https://github.com/ryo88c/BEAR.Authority
ライブラリ化することで実装が整理できて良いですね。
アドベントカレンダーということで2018年内に投稿したかったのですが、気がついたら2019年になっていました。あけましておめでとうございます。
認証機能は一般化されているところとそうでないところが比較的混ざりあってしまいやすい機能だと思います。
だからこそライブラリ化によってビジネスロジックをできる限り分離して改修のしやすさを維持しておく価値がより高いのだと思います。
BEAR.Sunday はその設計思想的に言っても、セッション的な認証の仕組みはミスマッチで、OAuth などに代表されるトークンによる認証がよく合います。特に、マルチテナント型のウェブサービスにおいてはセキュリティ上の懸念として運用が雑なアカウントを起点としたインシデントがありますが、JWT で秘密鍵をアカウント別に発行することでそういったリスクへの対策にもなります。
従って、このライブラリでは OAuth 2.0 Bearer と JSON Web Token (JWT) を使って認証機能を実装しています。
よりビジネスロジックとの混在が予測される承認機能は Authentication
クラスに実装し、承認される側、要はウェブサービスでいうところのユーザーを JWT の仕様に合わせて Audience
というクラスとして実装しています。Audience
は JWT によってトークナイズされる際に Payload
というクラスに格納されます。
これら2つのクラスはバリューオブジェクトとしての性質を持たせているため、依存性の注入は意図的にしていません。
ソースコードはできるだけ無駄がないよう書いたつもりなので、よかったら一度目を通してみてください。