16.4. 読み取り専用ユーザー属性

Red Hat Single Sign-On に保存されている通常のユーザーには、ユーザープロファイルに関連するさまざまな属性があります。このような属性には、email、firstname、lastname が含まれます。ただし、ユーザーには通常のプロファイルデータではなくメタデータの属性もある場合があります。通常、メタデータ属性はユーザーに対して読み取り専用である必要があり、通常のユーザーは、Red Hat Single Sign-On ユーザーインターフェイスまたは Account REST API からこれらの属性を更新する方法はないはずです。Admin REST API を使用してユーザーを作成または更新する場合に、管理者は一部の属性を読み取り専用にする必要があります。

メタデータ属性は通常、これらのグループの属性です。

  • ユーザーストレージプロバイダーに関連するさまざまなリンクまたはメタデータ。たとえば、LDAP 統合の場合に、LDAP_ID 属性には LDAP サーバーのユーザーの ID が含まれます。
  • ユーザーストレージによってプロビジョニングされるメタデータ。たとえば、LDAP からプロビジョニングされる createdTimestamp は、常にユーザーまたは管理者によって読み取り専用である必要があります。
  • さまざまなオーセンティケーターに関連するメタデータ。たとえば、KERBEROS_PRINCIPAL 属性には、特定ユーザーの kerberos プリンシパル名を含めることができます。同様に、属性 usercertificate には、X.509 証明書からのデータを使用したユーザーのバインディングに関連するメタデータを含めることができます。これは、通常 X.509 証明書認証が有効な場合に使用されます。
  • applications/clients によるユーザーの識別に関連するメタデータ。たとえば、saml.persistent.name.id.my_app には SAML NameID を含めることができます。これは、クライアントアプリケーション my_app がユーザーの識別子として使用されます。
  • 承認ポリシーに関連するメタデータ。属性ベースのアクセス制御 (ABAC) に使用されます。これらの属性の値は、承認の決定に使用できます。したがって、ユーザーはこれらの属性を更新できないことが重要です。

長期的な観点からは、Red Hat Single Sign-On には適切なユーザープロファイル SPI があり、すべてのユーザー属性を詳細に設定できます。現在、この機能はまだ完全には利用できません。そのため、Red Hat Single Sign-On にはユーザー属性の内部リストがあり、ユーザーおよび、サーバーレベルで設定された管理者に対して読み取り専用です。

これは、Red Hat Single Sign-On のデフォルトプロバイダーおよび機能によって内部で使用される読み取り専用属性のリストであるため、常に読み取り専用です。

  • ユーザーの場合: KERBEROS_PRINCIPALLDAP_IDLDAP_ENTRY_DNCREATED_TIMESTAMPcreateTimestampmodifyTimestampuserCertificatesaml.persistent.name.id.for.*ENABLEDEMAIL_VERIFIED
  • 管理者の場合: KERBEROS_PRINCIPALLDAP_IDLDAP_ENTRY_DNCREATED_TIMESTAMPcreateTimestampmodifyTimestamp

システム管理者は、この一覧に属性を追加することもできます。現在、設定はサーバーレベルで利用できます。この設定は standalone(-*).xml ファイルに Red Hat Single Sign-On サーバーサブシステムの設定に追加できます。

<spi name="userProfile">
    <provider name="legacy-user-profile" enabled="true">
        <properties>
            <property name="read-only-attributes" value="[&quot;foo&quot;,&quot;bar*&quot;]"/>
            <property name="admin-read-only-attributes" value="[&quot;foo&quot;]"/>
        </properties>
    </provider>
</spi>

次のコマンドで JBoss CLI を使用して同じ内容を設定できます。

/subsystem=keycloak-server/spi=userProfile/:add
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:add(properties={},enabled=true)
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:map-put(name=properties,key=read-only-attributes,value=[foo,bar*])
/subsystem=keycloak-server/spi=userProfile/provider=legacy-user-profile/:map-put(name=properties,key=admin-read-only-attributes,value=[foo])

この例では、ユーザーおよび管理者は foo 属性を更新できません。ユーザーは、bar で始まる属性を編集できません。たとえば、barbarrier などです。設定は大文字と小文字を区別しないため、FOOBarRier などの属性も拒否されます。ワイルドカード文字 * は属性名の末尾でのみサポートされるので、管理者は指定された文字で始まるすべての属性を効果的に拒否できます。属性の途中の * は通常の文字と見なされます。