Posted at

BEAR.Sunday 用認証ライブラリ

BEAR.Sunday 上で実装した認証機能をライブラリ化しました。

https://github.com/ryo88c/BEAR.Authority

ライブラリ化することで実装が整理できて良いですね。

アドベントカレンダーということで2018年内に投稿したかったのですが、気がついたら2019年になっていました。あけましておめでとうございます。

認証機能は一般化されているところとそうでないところが比較的混ざりあってしまいやすい機能だと思います。

だからこそライブラリ化によってビジネスロジックをできる限り分離して改修のしやすさを維持しておく価値がより高いのだと思います。

BEAR.Sunday はその設計思想的に言っても、セッション的な認証の仕組みはミスマッチで、OAuth などに代表されるトークンによる認証がよく合います。特に、マルチテナント型のウェブサービスにおいてはセキュリティ上の懸念として運用が雑なアカウントを起点としたインシデントがありますが、JWT で秘密鍵をアカウント別に発行することでそういったリスクへの対策にもなります。

従って、このライブラリでは OAuth 2.0 BearerJSON Web Token (JWT) を使って認証機能を実装しています。

よりビジネスロジックとの混在が予測される承認機能は Authentication クラスに実装し、承認される側、要はウェブサービスでいうところのユーザーを JWT の仕様に合わせて Audience というクラスとして実装しています。Audience は JWT によってトークナイズされる際に Payload というクラスに格納されます。

これら2つのクラスはバリューオブジェクトとしての性質を持たせているため、依存性の注入は意図的にしていません。

ソースコードはできるだけ無駄がないよう書いたつもりなので、よかったら一度目を通してみてください。