Springbootベースで始まるSpring Security(2)
初めまして、Junior Back-end Developer、SIMOKITAZAWAです。
色々と足りないところがあるかと思いますがよろしくお願い致します。
私がZENNを始めた理由は、
- 私が勉強したことをまとめたい
- 勉強の内容を共有して一緒に成長したい
- 私が間違って理解している部分について先輩たちに教えてもらいたい
このような理由で始めることになりました。
たくさんの教えをお願いします。
復習
Spring Security(1)でdependencyを追加してサーバーを起動すると、ウェブセキュリティ機能が始まることを確認しました。セキュリティは始まりましたが、現在、ユーザーアカウントが1つだけ存在し、権限に対する機能も存在しません。また、ハッカーに対する何の備えもできていません。そのため、もう少しセキュリティを機能させるために設定してみましょう。
SecurityConfig
もし、前のVersionを使っていらしゃる方のためもう一個Applicationを作りました。
Spring Boot 2.5.11Versionで、Gradleです。参考してください。
- new Version
- old Version
SpringConfig classを作って上のようにしてください。
WebSecurityConfierAdapterはSrping SecurityのWebセキュリティ機能の初期化および設定を行うところです。WebSecurityConfierAdapterは、HttpSecurityという詳細なセキュリティ機能を設定できるAPIを提供します。このHttpSecurityで認証API、認可APIを設定できます。
現在、新しいVersionではWebSecurityConfierAdapterを提供していません。
新しいVersionでは@Beanで管理します。
WebSecurityConfierAdapterの内部に入ってみるとWebセキュリティ機能の初期化および設定することをわかります。
- new Version
- old Version
.authorizeRequests → request承認がServerに届くとき
.anyRequest().authenticated(); → どんなrequestでも認証が必要である意味です。
.formLogin → Spring Securityのlogin Pageを使う意味です。
old VersionではMacで (command + n)押すと@Overrideを簡単にできる場面が見えます。青い色のところを追加してください。
まずは基本設定と同じようにログインができる設定してみます。
また、サーバーを再起動するたびにSpring Securityで提供するpasswordをcopyすることが不便なのでapplication.propertiesでuserとpasswordを設定しましょう。
これはnew Versionもold Versionも同じです。
spring.security.user.name=user
spring.security.user.password=1234
name = user
password = 1234にしました。これからは設定したuserとpasswordで入れます。
入れますよね、どのような流れで行われたのでしょうか。
- userはサーバーにサイトのGet requestを送ります。
- serverは認証されたuserのみがサービスにアクセスできるようにしたため、login pageに redirectします。
- userはusernameとpasswordを入力してrequestを再度送信します。
- serverはuserのrequestでSESSION IDを生成します。
- 認証TokenをSecurityContextに作成し、SecurityContextをSessionに保存します。
- その後、userが再びserverにGetを要請すると、userが持っているSESSIONに保存された認証tokenを確認した後、サービスを提供します。
- SecurityContextについては、後で勉強します。
Discussion