keycloak
にawx(ansible Tower)Webページのクライアントがあります。このクライアントを介してログインするには、特定のkeycloak
グループのユーザーのみが必要です。
他のすべてのユーザー(特定のグループを除く)がこのkeycloak
クライアントを使用できないようにするにはどうすればよいですか?
私はそれを次のように解決しました:
user.hasRole(realm.getRole("yourRoleName"))
)。Keycloak管理コンソールで、[クライアント]メニューに移動し、クライアントを選択します。クライアントの設定ページで、Authorization Enabled:Onを設定し、Saveをクリックします。新しいAuthorizationタブが表示されますので、そこに移動してからPoliciesタブの下で、Create Policyをクリックし、Group-based policyを選択します。そこで、あなたは 特定のグループへのアクセスを制限する を行うことができます。これは、すでに[グループ]メニューでグループを定義していることを前提としています。
--EDIT 2019-11-08--
コメントで述べたように、Client Protocolはopenid-connectに設定する必要がありますおよびAccess Typeをconfidentialに設定して、 Authorization Enabledオプションが表示されます。
役立つ場合は、次のスクリプトを使用して、この動作をクライアントに実装できます。クライアントに特定の役割(ここではfeature:authenticate
と呼ばれます)が含まれている場合、スクリプトはユーザーに役割があるかどうかを確認し、エラーページ(テーマにデプロイする必要のある新しいテンプレート)でない場合。
AuthenticationFlowError = Java.type("org.keycloak.authentication.AuthenticationFlowError");
function authenticate(context) {
var MANDATORY_ROLE = 'feature:authenticate';
var username = user ? user.username : "anonymous";
var client = session.getContext().getClient();
LOG.debug("Checking access to authentication for client '" + client.getName() + "' through mandatory role '" + MANDATORY_ROLE + "' for user '" + username + "'");
var mandatoryRole = client.getRole(MANDATORY_ROLE);
if (mandatoryRole === null) {
LOG.debug("No mandatory role '" + MANDATORY_ROLE + "' for client '" + client.getName() + "'");
return context.success();
}
if (user.hasRole(mandatoryRole)) {
LOG.info("Successful authentication for user '" + username + "' with mandatory role '" + MANDATORY_ROLE + "' for client '" + client.getName() + "'");
return context.success();
}
LOG.info("Denied authentication for user '" + username + "' without mandatory role '" + MANDATORY_ROLE + "' for client '" + client.getName() + "'");
return denyAccess(context, mandatoryRole);
}
function denyAccess(context, mandatoryRole) {
var formBuilder = context.form();
var client = session.getContext().getClient();
var description = !mandatoryRole.getAttribute('deniedMessage').isEmpty() ? mandatoryRole.getAttribute('deniedMessage') : [''];
var form = formBuilder
.setAttribute('clientUrl', client.getRootUrl())
.setAttribute('clientName', client.getName())
.setAttribute('description', description[0])
.createForm('denied-auth.ftl');
return context.failure(AuthenticationFlowError.INVALID_USER, form);
}
docu https://www.keycloak.org/docs/6.0/server_admin/#executions によると、「実行の追加」でカスタムスクリプトを追加するには、その機能をアクティブにする必要があります。
bin/standalone.sh|bat -Dkeycloak.profile.feature.scripts=enabled
機能を備えた@Allanソリューション:認証は私にはよさそうです
この拡張機能を使用して、特定のグループへのアクセスを制限できます: https://github.com/thomasdarimont/keycloak-extension-playground/tree/master/auth-require-group-extension