Shibboleth対応

1. Shibboleth IdPからの属性情報に基づき、ユーザへのロール割り当てをする

  • Idpから取得した属性情報は、以下の設定に従ってWEKOに渡される

  • 認証時にIdPより取得した属性情報に基づきログインユーザに対してロール割り当てを行う

    • IdP属性情報は以下とする

      • ロール:wekoSocietyAffiliation
    • IdP属性値に対するロール割り当ては以下とする

      • 「管理者」→システム管理者ロール'System Administrator'

      • 「図書館員」→リポジトリ管理者ロール'Repository Administrator'

      • 「教員」→一般利用者ロール'Contributor'

      • 「教官」→一般利用者ロール'Contributor'

    • 上記のIdP属性値とロールとの対応は、以下のコンフィグで設定する

    • IdP属性値がconfigに含まれないロールであった場合は、ロールを持たないユーザとなる

2. Shibboleth IdPからの属性情報に基づき、サイトライセンス機能を制御する

  • 認証時にIdPより取得した属性情報に基づきログインユーザに対してサイトライセンス制御を行う

    • IdP属性情報は以下とする

      • サイトライセンス:wekoSiteUserWithinIpRange
    • IdP属性値に対するサイトライセンスは以下とする

      • "False"の場合は以下のエラーメッセージを表示し、ログイン不可とする
         JP: ログインに失敗しました。
         EN: Failed to login.

3. Shibbolethでのアカウント情報(ロール含む)の利用

  • シボレス経由でログインする都度、シボレス属性値をWEKO3のユーザ情報に反映

    • SHIB_ATTR_USER_NAME は、invenio の仕様でユニークである必要がある。

    • SHIB_ATTR_ROLE_AUTHORITY_NAMEについて、ロールの紐づけをconfig で指定できるものとし、configに含まれないロールであった場合は、WEKOのロールとしては設定しない

      • SHIB_ATTR_ROLE_AUTHORITY_NAMEに複数属性が含まれている場合は,複数ロールの割当を行えるようにする。(複数属性が含まれている場合は属性値を半角セミコロン「;」で区切られている)
  • シボレスユーザの紐づけキー

4. 実装

  • weko_accounts.views. shib_sp_login関数によって、IdPからのリクエストを処理する

  • 上記の処理で、shibboleth_userテーブルにレコードが存在する場合は、weko_accounts.views.shib_auto_login関数で続きの処理を行う

    • リクエストのSHIB_ATTR_SESSION_IDとsession['shib_session_id']のどちらかに情報がある場合は、ログインする

      • リクエストにSHIB_ATTR_SESSION_IDが含まれず、session['shib_session_id']に情報がある場合は、weko_accounts.api.ShibUser.new_relation_infoメソッドによってshibboleth_userテーブルにレコードを作成する

        • あわせて、userprofiles_userprofileテーブルに以下の内容でレコードを作成する

          • user_id:shibboleth_userテーブルに作成するレコードのidフィールドと同じ

          • timezone:コンフィグのデフォルト値

          • language:コンフィグのデフォルト値

          • username:shibboleth_userテーブルに作成するレコードのshib_user_nameフィールドと同じ

      • レコード作成の有無にかかわらず、weko_accounts.api.ShibUser. check_inメソッドの中で、ロールの割り当てを行う

    • 上記以外の場合は、WEKOのログイン画面に遷移する

  • shibboleth_userテーブルにレコードが存在しなかった場合は、weko_accounts.views.shib_login関数でID選択画面に遷移する

    • 登録済みのIDでログインする場合は、weko_accounts.views.confirm_user関数で続きの処理を行う

      • リクエストに、有効なWEKOアカウントとパスワードが含まれない場合は、WEKOのログイン画面に遷移する

      • リクエストのWEKOアカウントのメールアドレスを使用して、shibboleth_userテーブルにレコードを作成する

      • weko_accounts.api.ShibUser. check_inメソッドの中で、ロールの割り当てを行う

      • ログインする

    • 新規IDでログインする場合は、weko_accounts.views.shib_auto_login関数でログインする

  • shibboleth_userテーブルにレコードを作成する場合は、あわせてユーザ関連テーブルも上書きする

    • 1) シボレス属性値をshibboleth_userテーブルに登録する

      • SHIB_ATTR_MAIL ⇒ shibboleth_user.shib_mail

      • SHIB_ATTR_USER_NAME ⇒ shibboleth_user.shib_user_name

      • SHIB_ATTR_ROLE_AUTHORITY_NAME ⇒shibboleth_user.shib_role_authority_name

    • 2) shibboleth_userテーブルから各テーブルに登録する

      • shibboleth_user.shib_mail ⇒ accounts_user.email

      • shibboleth_user.shib_user_name ⇒ userprofiles_userprofile.username

      • shibboleth_user.shib_role_authority_name ⇒ accounts_userrole.user_id,role_id

    • 1),2) どちらの登録の際も値のチェックは行わず、登録先の値を上書きする。

  • 更新履歴

日付 GitHubコミットID 更新内容

2023/08/31

353ba1deb094af5056a58bb40f07596b8e95a562 初版作成

results matching ""

    No results matching ""