Skip to content

Commit 9ad4e3d

Browse files
committed
ユーザープロビジョニング自動化、ロールに関する記述を修正
1 parent bb7766f commit 9ad4e3d

1 file changed

Lines changed: 151 additions & 158 deletions

File tree

Lines changed: 151 additions & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -1,166 +1,152 @@
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
7070
7171
4\. 実装
7272

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\) どちらの登録の際も値のチェックは行わず、登録先の値を上書きする
160146

161147
<!-- end list -->
162148

163-
- > 更新履歴
149+
- > 更新履歴
164150
165151
<table>
166152
<thead>
@@ -178,5 +164,12 @@
178164
<td>353ba1deb094af5056a58bb40f07596b8e95a562</td>
179165
<td>初版作成</td>
180166
</tr>
167+
<tr class="even">
168+
<td><blockquote>
169+
<p>2025/02/-</p>
170+
</blockquote></td>
171+
<td></td>
172+
<td>ユーザープロビジョニング自動化追記、ロール情報修正</td>
173+
</tr>
181174
</tbody>
182-
</table>
175+
</table>

0 commit comments

Comments
 (0)