|
1 | | -## Shibboleth対応 |
2 | | - |
3 | | -1\. Shibboleth IdPからの属性情報に基づき、ユーザへのロール割り当てをする |
4 | | - |
5 | | - - Idpから取得した属性情報は、以下の設定に従ってWEKOに渡される |
6 | | - |
7 | | - - パス:<https://github.com/RCOSDP/weko/blob/v0.9.22/nginx/login.php#L16-L20> |
8 | | - |
9 | | - - 「$\_SERVER\\[Idp側での属性名\\]」で渡された情報を「$post\_args\\[WEKO側での属性名\\]」として受け取る |
10 | | - |
11 | | - - 認証時にIdPより取得した属性情報に基づきログインユーザに対してロール割り当てを行う |
12 | | - |
13 | | - - IdP属性情報は以下とする |
14 | | - |
15 | | - - ロール:wekoSocietyAffiliation |
16 | | - |
17 | | - - IdP属性値に対するロール割り当ては以下とする |
18 | | - |
19 | | - - 「管理者」→システム管理者ロール'System Administrator' |
20 | | - |
21 | | - - 「図書館員」→リポジトリ管理者ロール'Repository Administrator' |
22 | | - |
23 | | - - 「教員」→一般利用者ロール'Contributor' |
24 | | - |
25 | | - - 「教官」→一般利用者ロール'Contributor' |
26 | | - |
27 | | - - 上記のIdP属性値とロールとの対応は、以下のコンフィグで設定する |
28 | | - |
29 | | - - パス:<https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L77-L82> |
30 | | - |
31 | | - - 設定キー:WEKO\_ACCOUNTS\_SHIB\_ROLE\_RELATION |
32 | | - |
33 | | - - IdP属性値がconfigに含まれないロールであった場合は、ロールを持たないユーザとなる |
34 | | - |
35 | | -2\. Shibboleth IdPからの属性情報に基づき、サイトライセンス機能を制御する |
36 | | - |
37 | | - - 認証時にIdPより取得した属性情報に基づきログインユーザに対してサイトライセンス制御を行う |
38 | | - |
39 | | - - IdP属性情報は以下とする |
40 | | - |
41 | | - - サイトライセンス:wekoSiteUserWithinIpRange |
42 | | - |
43 | | - - IdP属性値に対するサイトライセンスは以下とする |
44 | | - |
45 | | - - "False"の場合は以下のエラーメッセージを表示し、ログイン不可とする |
46 | | - JP: ログインに失敗しました。 |
47 | | - EN: Failed to login. |
48 | | - |
49 | | -3\. Shibbolethでのアカウント情報(ロール含む)の利用 |
50 | | - |
51 | | - - シボレス経由でログインする都度、シボレス属性値をWEKO3のユーザ情報に反映 |
52 | | - |
53 | | - - SHIB\_ATTR\_USER\_NAME は、invenio の仕様でユニークである必要がある。 |
54 | | - |
55 | | - - SHIB\_ATTR\_ROLE\_AUTHORITY\_NAMEについて、ロールの紐づけをconfig で指定できるものとし、configに含まれないロールであった場合は、WEKOのロールとしては設定しない |
56 | | - |
57 | | - - SHIB\_ATTR\_ROLE\_AUTHORITY\_NAMEに複数属性が含まれている場合は,複数ロールの割当を行えるようにする。(複数属性が含まれている場合は属性値を半角セミコロン「;」で区切られている) |
58 | | - |
59 | | - - シボレスユーザの紐づけキー |
60 | | - |
61 | | - - SHIB\_ATTR\_EPPNとする |
62 | | - |
63 | | - - 存在しない場合は、かわりにSHIB\_ATTR\_USER\_NAMEを利用することができる |
64 | | - |
65 | | - - SHIB\_ATTR\_USER\_NAMEを利用するかどうかは、以下のconfigで指定する |
66 | | - |
67 | | - - パス:<https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L97> |
68 | | - |
69 | | - - 設定キー:WEKO\_ACCOUNTS\_SHIB\_ALLOW\_USERNAME\_INST\_EPPN |
| 1 | +## Shibboleth 対応 |
| 2 | + |
| 3 | +1\. Shibboleth IdP からの属性情報に基づき、ユーザへのロール割り当てをする |
| 4 | + |
| 5 | +- Idp から取得した属性情報は、以下の設定に従って WEKO に渡される |
| 6 | + |
| 7 | + - パス:<https://github.com/RCOSDP/weko/blob/v0.9.22/nginx/login.php#L16-L20> |
| 8 | + |
| 9 | + - 「$\_SERVER\\[Idp側での属性名\\]」で渡された情報を「$post_args\\[WEKO 側での属性名\\]」として受け取る |
| 10 | + |
| 11 | +- 認証時に IdP より取得した属性情報に基づきログインユーザに対してロール割り当てを行う |
| 12 | + |
| 13 | + - IdP 属性情報は以下とする |
| 14 | + |
| 15 | + - ロール:wekoSocietyAffiliation |
| 16 | + |
| 17 | + - IdP 属性値に対するロール割り当ては以下とする |
| 18 | + |
| 19 | + - 「管理者」→ システム管理者ロール'System Administrator' |
| 20 | + |
| 21 | + - 「学認 IdP 経由」→ 一般利用者ロール'Contributor' |
| 22 | + |
| 23 | + - 「機関内の Orthros 経由」→ リポジトリ管理者ロール'Repository Administrator' |
| 24 | + |
| 25 | + - 「機関外の Orthros 経由」→ コミュニティ管理者ロール'Community Administrator' |
| 26 | + |
| 27 | + - 「その他」→ ロール無'None' |
| 28 | + |
| 29 | + - 上記の IdP 属性値とロールとの対応は、以下のコンフィグで設定する |
| 30 | + |
| 31 | + - パス:(暫定)<https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L140-L146> |
| 32 | + |
| 33 | + - 設定キー:WEKO_ACCOUNTS_SHIB_ROLE_RELATION |
| 34 | + |
| 35 | +2\. Shibboleth IdP からの属性情報に基づき、サイトライセンス機能を制御する |
| 36 | + |
| 37 | +- 認証時に IdP より取得した属性情報に基づきログインユーザに対してサイトライセンス制御を行う |
| 38 | + |
| 39 | + - IdP 属性情報は以下とする |
| 40 | + |
| 41 | + - サイトライセンス:wekoSiteUserWithinIpRange |
| 42 | + |
| 43 | + - IdP 属性値に対するサイトライセンスは以下とする |
| 44 | + |
| 45 | + - "False"の場合は以下のエラーメッセージを表示し、ログイン不可とする |
| 46 | + JP: ログインに失敗しました。 |
| 47 | + EN: Failed to login. |
| 48 | + |
| 49 | +3\. Shibboleth でのアカウント情報(ロール含む)の利用 |
| 50 | + |
| 51 | +- シボレス経由でログインする都度、シボレス属性値を WEKO3 のユーザ情報に反映 |
| 52 | + |
| 53 | + - SHIB_ATTR_USER_NAME は、invenio の仕様でユニークである必要がある。 |
| 54 | + |
| 55 | + - SHIB_ATTR_ROLE_AUTHORITY_NAME について、ロールの紐づけを config で指定できるものとし、config に含まれないロールであった場合は、WEKO のロールとしては設定しない |
| 56 | + |
| 57 | + - SHIB_ATTR_ROLE_AUTHORITY_NAME に複数属性が含まれている場合は,複数ロールの割当を行えるようにする。(複数属性が含まれている場合は属性値を半角セミコロン「;」で区切られている) |
| 58 | + |
| 59 | +- シボレスユーザの紐づけキー |
| 60 | + |
| 61 | + - SHIB_ATTR_EPPN とする |
| 62 | + |
| 63 | + - 存在しない場合は、かわりに SHIB_ATTR_USER_NAME を利用することができる |
| 64 | + |
| 65 | + - SHIB_ATTR_USER_NAME を利用するかどうかは、以下の config で指定する |
| 66 | + |
| 67 | + - > パス:(暫定)<https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L158> |
| 68 | +
|
| 69 | + - > 設定キー:WEKO_ACCOUNTS_SHIB_ALLOW_USERNAME_INST_EPPN |
70 | 70 |
|
71 | 71 | 4\. 実装 |
72 | 72 |
|
73 | | - - weko\_accounts.views. shib\_sp\_login関数によって、IdPからのリクエストを処理する |
74 | | - |
75 | | - - リクエストにSHIB\_ATTR\_SESSION\_IDが含まれず、以下のコンフィグWEKO\_ACCOUNTS\_SHIB\_LOGIN\_ENABLEDがfalseの場合はエラーとしてWEKOのログイン画面に遷移する |
76 | | - |
77 | | - - > パス(instance.cfg): |
78 | | - > <https://github.com/RCOSDP/weko/blob/v0.9.22/scripts/instance.cfg#L436> |
79 | | - |
80 | | - - パス(config.py): |
81 | | - <https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L29> |
82 | | - |
83 | | - - weko\_accounts.utils. parse\_attributes関数によってリクエストの内容を確認し、必須の項目が含まれない場合はエラーとしてWEKOのログイン画面に遷移する |
84 | | - |
85 | | - - 必須項目は以下のコンフィグで設定する |
86 | | - |
87 | | - - > パス(instance.cfg): |
88 | | - > <https://github.com/RCOSDP/weko/blob/v0.9.22/scripts/instance.cfg#L442-L448> |
89 | | - |
90 | | - - パス(config.py): |
91 | | - <https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L64-L74> |
92 | | - |
93 | | - - 設定キー:WEKO\_ACCOUNTS\_SSO\_ATTRIBUTE\_MAP |
94 | | - |
95 | | - - リクエストの内容にSHIB\_ATTR\_EPPNが含まれず、かわりにSHIB\_ATTR\_USER\_NAMEを利用しない設定である場合はエラーとしてWEKOのログイン画面に遷移する |
96 | | - |
97 | | - - セッション情報はRedisに保存する |
98 | | - |
99 | | - - キーは、以下のコンフィグの値にログイン画面での入力値SHIB\_ATTR\_SESSION\_IDを加えたものを用いる |
100 | | - |
101 | | - - パス:<https://github.com/RCOSDP/weko/blob/13c305a3048309dbda87a614ffedac18423820aa/modules/weko-accounts/weko_accounts/config.py#L32> |
102 | | - |
103 | | - - 設定キー:WEKO\_ACCOUNTS\_SHIB\_CACHE\_PREFIX |
104 | | - |
105 | | - - リクエストの内容をもとに、shibboleth\_userテーブルからSHIB\_ATTR\_EPPNまたはSHIB\_ATTR\_USER\_NAMEを使用してレコードの存在を確認する |
106 | | - |
107 | | - - 上記の処理で、shibboleth\_userテーブルにレコードが存在する場合は、weko\_accounts.views.shib\_auto\_login関数で続きの処理を行う |
108 | | - |
109 | | - - リクエストのSHIB\_ATTR\_SESSION\_IDとsession\['shib\_session\_id'\]のどちらかに情報がある場合は、ログインする |
110 | | - |
111 | | - - リクエストにSHIB\_ATTR\_SESSION\_IDが含まれず、session\['shib\_session\_id'\]に情報がある場合は、weko\_accounts.api.ShibUser.new\_relation\_infoメソッドによってshibboleth\_userテーブルにレコードを作成する |
112 | | - |
113 | | - - あわせて、userprofiles\_userprofileテーブルに以下の内容でレコードを作成する |
114 | | - |
115 | | - - user\_id:shibboleth\_userテーブルに作成するレコードのidフィールドと同じ |
116 | | - |
117 | | - - timezone:コンフィグのデフォルト値 |
118 | | - |
119 | | - - language:コンフィグのデフォルト値 |
120 | | - |
121 | | - - username:shibboleth\_userテーブルに作成するレコードのshib\_user\_nameフィールドと同じ |
122 | | - |
123 | | - - レコード作成の有無にかかわらず、weko\_accounts.api.ShibUser. check\_inメソッドの中で、ロールの割り当てを行う |
124 | | - |
125 | | - - 上記以外の場合は、WEKOのログイン画面に遷移する |
126 | | - |
127 | | - - shibboleth\_userテーブルにレコードが存在しなかった場合は、weko\_accounts.views.shib\_login関数でID選択画面に遷移する |
128 | | - |
129 | | - - 登録済みのIDでログインする場合は、weko\_accounts.views.confirm\_user関数で続きの処理を行う |
130 | | - |
131 | | - - リクエストに、有効なWEKOアカウントとパスワードが含まれない場合は、WEKOのログイン画面に遷移する |
132 | | - |
133 | | - - リクエストのWEKOアカウントのメールアドレスを使用して、shibboleth\_userテーブルにレコードを作成する |
134 | | - |
135 | | - - weko\_accounts.api.ShibUser. check\_inメソッドの中で、ロールの割り当てを行う |
136 | | - |
137 | | - - ログインする |
138 | | - |
139 | | - - 新規IDでログインする場合は、weko\_accounts.views.shib\_auto\_login関数でログインする |
140 | | - |
141 | | - - shibboleth\_userテーブルにレコードを作成する場合は、あわせてユーザ関連テーブルも上書きする |
142 | | - |
143 | | - - 1\) シボレス属性値をshibboleth\_userテーブルに登録する |
144 | | - |
145 | | - - SHIB\_ATTR\_MAIL ⇒ shibboleth\_user.shib\_mail |
146 | | - |
147 | | - - SHIB\_ATTR\_USER\_NAME ⇒ shibboleth\_user.shib\_user\_name |
148 | | - |
149 | | - - SHIB\_ATTR\_ROLE\_AUTHORITY\_NAME ⇒shibboleth\_user.shib\_role\_authority\_name |
150 | | - |
151 | | - - 2\) shibboleth\_userテーブルから各テーブルに登録する |
152 | | - |
153 | | - - shibboleth\_user.shib\_mail ⇒ accounts\_user.email |
154 | | - |
155 | | - - shibboleth\_user.shib\_user\_name ⇒ userprofiles\_userprofile.username |
156 | | - |
157 | | - - shibboleth\_user.shib\_role\_authority\_name ⇒ accounts\_userrole.user\_id,role\_id |
158 | | - |
159 | | - - 1),2) どちらの登録の際も値のチェックは行わず、登録先の値を上書きする。 |
| 73 | +- weko_accounts.views. shib_sp_login 関数によって、IdP からのリクエストを処理する |
| 74 | + |
| 75 | + - リクエストに SHIB_ATTR_SESSION_ID が含まれず、以下のコンフィグ WEKO_ACCOUNTS_SHIB_LOGIN_ENABLED が false の場合はエラーとして WEKO のログイン画面に遷移する |
| 76 | + |
| 77 | + - > パス(instance.cfg): |
| 78 | + > <https://github.com/RCOSDP/weko/blob/v0.9.22/scripts/instance.cfg#L436> |
| 79 | +
|
| 80 | + - > パス(config.py): |
| 81 | + > <https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L29> |
| 82 | +
|
| 83 | + - weko_accounts.utils. parse_attributes 関数によってリクエストの内容を確認し、必須の項目が含まれない場合はエラーとして WEKO のログイン画面に遷移する |
| 84 | + |
| 85 | + - 必須項目は以下のコンフィグで設定する |
| 86 | + |
| 87 | + - > パス(instance.cfg): |
| 88 | + > <https://github.com/RCOSDP/weko/blob/v0.9.22/scripts/instance.cfg#L442-L448> |
| 89 | +
|
| 90 | + - > パス(config.py): |
| 91 | + > <https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L64-L74> |
| 92 | +
|
| 93 | + - > 設定キー:WEKO_ACCOUNTS_SSO_ATTRIBUTE_MAP |
| 94 | +
|
| 95 | + - リクエストの内容に SHIB_ATTR_EPPN が含まれず、かわりに SHIB_ATTR_USER_NAME を利用しない設定である場合はエラーとして WEKO のログイン画面に遷移する |
| 96 | + |
| 97 | + - セッション情報は Redis に保存する |
| 98 | + |
| 99 | + - キーは、以下のコンフィグの値にログイン画面での入力値 SHIB_ATTR_SESSION_ID を加えたものを用いる |
| 100 | + |
| 101 | + - > パス:<https://github.com/RCOSDP/weko/blob/13c305a3048309dbda87a614ffedac18423820aa/modules/weko-accounts/weko_accounts/config.py#L32> |
| 102 | +
|
| 103 | + - > 設定キー:WEKO_ACCOUNTS_SHIB_CACHE_PREFIX |
| 104 | +
|
| 105 | + - リクエストの内容をもとに、shibboleth_user テーブルから SHIB_ATTR_EPPN または SHIB_ATTR_USER_NAME を使用してレコードの存在を確認する |
| 106 | + |
| 107 | +- 上記の処理で、shibboleth_user テーブルにレコードが存在する場合は、weko_accounts.views.shib_auto_login 関数で続きの処理を行う |
| 108 | + |
| 109 | + - リクエストの SHIB_ATTR_SESSION_ID と session\['shib_session_id'\]のどちらかに情報がある場合は、ログインする |
| 110 | + |
| 111 | + - リクエストに SHIB_ATTR_SESSION_ID が含まれず、session\['shib_session_id'\]に情報がある場合は、weko_accounts.api.ShibUser.new_relation_info メソッドによって shibboleth_user テーブルにレコードを作成、および WEKO3 の新規 ID を作成する |
| 112 | + |
| 113 | + - あわせて、userprofiles_userprofile テーブルに以下の内容でレコードを作成する |
| 114 | + |
| 115 | + - user_id:shibboleth_user テーブルに作成するレコードの id フィールドと同じ |
| 116 | + |
| 117 | + - timezone:コンフィグのデフォルト値 |
| 118 | + |
| 119 | + - language:コンフィグのデフォルト値 |
| 120 | + |
| 121 | + - username:shibboleth_user テーブルに作成するレコードの shib_user_name フィールドと同じ |
| 122 | + |
| 123 | + - レコード作成の有無にかかわらず、weko_accounts.api.ShibUser. check_in メソッドの中で、ロールの割り当てを行う |
| 124 | + |
| 125 | +- 新規 ID 作成後は、weko_accounts.views.shib_auto_login 関数でログインする |
| 126 | + |
| 127 | +- shibboleth_user テーブルにレコードを作成する場合は、あわせてユーザ関連テーブルも上書きする |
| 128 | + |
| 129 | + - 1\) シボレス属性値を shibboleth_user テーブルに登録する |
| 130 | + |
| 131 | + - SHIB_ATTR_MAIL ⇒ shibboleth_user.shib_mail |
| 132 | + |
| 133 | + - SHIB_ATTR_USER_NAME ⇒ shibboleth_user.shib_user_name |
| 134 | + |
| 135 | + - SHIB_ATTR_ROLE_AUTHORITY_NAME ⇒shibboleth_user.shib_role_authority_name |
| 136 | + |
| 137 | + - 2\) shibboleth_user テーブルから各テーブルに登録する |
| 138 | + |
| 139 | + - shibboleth_user.shib_mail ⇒ accounts_user.email |
| 140 | + |
| 141 | + - shibboleth_user.shib_user_name ⇒ userprofiles_userprofile.username |
| 142 | + |
| 143 | + - shibboleth_user.shib_role_authority_name ⇒ accounts_userrole.user_id,role_id |
| 144 | + |
| 145 | + - 1\),2\) どちらの登録の際も値のチェックは行わず、登録先の値を上書きする |
160 | 146 |
|
161 | 147 | <!-- end list --> |
162 | 148 |
|
163 | | - - > 更新履歴 |
| 149 | +- > 更新履歴 |
164 | 150 |
|
165 | 151 | <table> |
166 | 152 | <thead> |
|
178 | 164 | <td>353ba1deb094af5056a58bb40f07596b8e95a562</td> |
179 | 165 | <td>初版作成</td> |
180 | 166 | </tr> |
| 167 | +<tr class="even"> |
| 168 | +<td><blockquote> |
| 169 | +<p>2025/02/-</p> |
| 170 | +</blockquote></td> |
| 171 | +<td></td> |
| 172 | +<td>ユーザープロビジョニング自動化追記、ロール情報修正</td> |
| 173 | +</tr> |
181 | 174 | </tbody> |
182 | | -</table> |
| 175 | +</table> |
0 commit comments