前提・実現したいこと
JavaにてSpring BootとSpring Securityを使用してログイン機能を作成しています。
https://www.server-world.info/query?os=CentOS_7&p=openldap
https://qiita.com/kazuki43zoo/items/6bef663e2a885d8a0f16
こちらのサイトを参考にしてOpenLDAPの環境を作成しdc=example,dc=com直下の
ou=People内のadmin,userではログインできるようになりました。
dc=example,dc=com
---cn=Manager
しかし、下記のような構造で作ったhoge1ユーザーではログインすることができませんでした。
dc=example,dc=com ---cn=Manager ---ou=groups ---cn=admin ---cn=user ---ou=people ---uid=admin ---uid=user ---ou=blue ---ou=group1 ---uid=hoge1 ---uid=hoge2 ---ou=group2 ---uid=huga1 ---uid=huga2 ---ou=red ---group1 ---uid=foo1 ---uid=foo2 ---gropu2 ---uid=bar1 ---uid=bar2
おそらくユーザーdnパターンが問題だとは思っていますが、どう記述すればよいのかわかりません。
最終的にはdc=example,dc=com内のou=group1のユーザーのみログインできるようにしようと思っております。
該当のソースコード
java
1@Override 2 protected void configure(AuthenticationManagerBuilder auth) throws Exception { 3 // LDAP認証を有効化 4 auth.ldapAuthentication() 5 // ユーザーの識別名(DN=Distinguished Name)パターンを指定 6 // {0}にはログインフォームで入力したusernameが埋め込まれる 7 .userDnPatterns("uid={0},ou=people") 8 // グループ(ロール)を検索するユニットを指定 9 .groupSearchBase("ou=groups") 10 // LDAPのデータソースを指定 11 .contextSource() 12 // 接続URLを指定 13 .url("ldap://localhost:389/dc=example,dc=com") 14 // LDAPに接続するためのユーザーの識別名を指定 15 .managerDn("cn=Manager,dc=example,dc=com") 16 // LDAPに接続するためのパスワードを指定 17 .managerPassword("password") 18 .and() 19 // UserDetailsを生成するオブジェクトを指定 20 // デフォルトはLdapUserDetailsMapperが利用されるが 21 //本エントリーでは氏名(cn=Common Name)が参照できる 22 //PersonContextMapperを利用 23 .userDetailsContextMapper(new PersonContextMapper()); 24 }
試したこと
まずはred内のgroup1でログインをしようとして下記コードに書き換えましたがログインすることができませんでした。
java
1@Override 2 protected void configure(AuthenticationManagerBuilder auth) throws Exception { 3 // LDAP認証を有効化 4 auth.ldapAuthentication() 5 // ユーザーの識別名(DN=Distinguished Name)パターンを指定 6 // {0}にはログインフォームで入力したusernameが埋め込まれる 7 .userDnPatterns("uid={0},ou=group1,ou=red") 8 // LDAPのデータソースを指定 9 .contextSource() 10 // 接続URLを指定 11 .url("ldap://localhost:389/dc=example,dc=com") 12 // LDAPに接続するためのユーザーの識別名を指定 13 .managerDn("cn=Manager,dc=example,dc=com") 14 // LDAPに接続するためのパスワードを指定 15 .managerPassword("password") 16 .and() 17 // UserDetailsを生成するオブジェクトを指定 18 // デフォルトはLdapUserDetailsMapperが利用されるが 19 //本エントリーでは氏名(cn=Common Name)が参照できる 20 //PersonContextMapperを利用 21 .userDetailsContextMapper(new PersonContextMapper()); 22 } 23
あなたの回答
tips
プレビュー