641 lines
44 KiB
HTML
641 lines
44 KiB
HTML
|
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
|
||
|
|
||
|
<ol class="breadcrumb">
|
||
|
<li><a href="#/realms/{{realm.realm}}/clients">{{:: 'clients' | translate}}</a></li>
|
||
|
<li>{{client.clientId}}</li>
|
||
|
</ol>
|
||
|
|
||
|
<kc-tabs-client></kc-tabs-client>
|
||
|
|
||
|
<form class="form-horizontal" name="clientForm" novalidate kc-read-only="!client.access.configure">
|
||
|
<fieldset class="border-top">
|
||
|
<div class="form-group">
|
||
|
<label class="col-md-2 control-label" for="clientId">{{:: 'client-id' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input class="form-control" type="text" id="clientId" name="clientId" data-ng-model="clientEdit.clientId" autofocus required>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client-id.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group">
|
||
|
<label class="col-md-2 control-label" for="name">{{:: 'name' | translate}} </label>
|
||
|
<div class="col-sm-6">
|
||
|
<input class="form-control" type="text" id="name" name="name" data-ng-model="clientEdit.name" autofocus>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client.name.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group">
|
||
|
<label class="col-md-2 control-label" for="description">{{:: 'description' | translate}} </label>
|
||
|
<div class="col-sm-6">
|
||
|
<input class="form-control" type="text" id="description" name="description" data-ng-model="clientEdit.description">
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client.description.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block">
|
||
|
<label class="col-md-2 control-label" for="enabled">{{:: 'enabled' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="clientEdit.enabled" name="enabled" id="enabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client.enabled.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="serverInfo.featureEnabled('ACCOUNT2') && !(accessType === 'bearer-only' && protocol === 'openid-connect')">
|
||
|
<label class="col-md-2 control-label" for="alwaysDisplayInConsole">{{:: 'alwaysDisplayInConsole' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="clientEdit.alwaysDisplayInConsole" name="alwaysDisplayInConsole" id="alwaysDisplayInConsole" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'alwaysDisplayInConsole.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="client.origin">
|
||
|
<label class="col-md-2 control-label">{{:: 'client-origin-link' | translate}}</label>
|
||
|
<div class="col-md-6">
|
||
|
{{originName}}
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client-origin.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol != 'docker-v2'">
|
||
|
<label class="col-md-2 control-label" for="consentRequired">{{:: 'consent-required' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="clientEdit.consentRequired" name="consentRequired" id="consentRequired" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'consent-required.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="clientEdit.consentRequired && protocol != 'docker-v2'">
|
||
|
<label class="col-md-2 control-label" for="displayOnConsentScreen">{{:: 'client.display-on-consent-screen' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="displayOnConsentScreen" ng-click="switchChange()" name="displayOnConsentScreen" id="displayOnConsentScreen" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client.display-on-consent-screen.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="clientEdit.consentRequired && protocol != 'docker-v2' && displayOnConsentScreen">
|
||
|
<label class="col-md-2 control-label" for="consentScreenText">{{:: 'client.consent-screen-text' | translate}} </label>
|
||
|
<div class="col-sm-6">
|
||
|
<input class="form-control" type="text" id="consentScreenText" name="consentScreenText" data-ng-model="clientEdit.attributes['consent.screen.text']">
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client.consent-screen-text.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group">
|
||
|
<label class="col-md-2 control-label" for="loginTheme">{{:: 'login-theme' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<select class="form-control" id="loginTheme"
|
||
|
ng-model="clientEdit.attributes['login_theme']"
|
||
|
ng-options="o.name as o.name for o in serverInfo.themes.login">
|
||
|
<option value="" selected></option>
|
||
|
</select>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'login-theme.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group">
|
||
|
<label class="col-md-2 control-label" for="protocol">{{:: 'client-protocol' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="protocol"
|
||
|
ng-change="changeProtocol()"
|
||
|
ng-model="protocol"
|
||
|
ng-options="aProtocol for aProtocol in protocols">
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client-protocol.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="protocol == 'openid-connect'">
|
||
|
<label class="col-md-2 control-label" for="accessType">{{:: 'access-type' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="accessType"
|
||
|
ng-change="changeAccessType()"
|
||
|
ng-model="accessType"
|
||
|
ng-options="aType for aType in accessTypes">
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'access-type.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="protocol == 'openid-connect' && !clientEdit.bearerOnly">
|
||
|
<label class="col-md-2 control-label" for="standardFlowEnabled">{{:: 'standard-flow-enabled' | translate}}</label>
|
||
|
<kc-tooltip>{{:: 'standard-flow-enabled.tooltip' | translate}}</kc-tooltip>
|
||
|
<div class="col-md-6">
|
||
|
<input ng-model="clientEdit.standardFlowEnabled" name="standardFlowEnabled" id="standardFlowEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="protocol == 'openid-connect' && !clientEdit.bearerOnly">
|
||
|
<label class="col-md-2 control-label" for="implicitFlowEnabled">{{:: 'implicit-flow-enabled' | translate}}</label>
|
||
|
<kc-tooltip>{{:: 'implicit-flow-enabled.tooltip' | translate}}</kc-tooltip>
|
||
|
<div class="col-md-6">
|
||
|
<input ng-model="clientEdit.implicitFlowEnabled" name="implicitFlowEnabled" id="implicitFlowEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="protocol == 'openid-connect' && !clientEdit.bearerOnly">
|
||
|
<label class="col-md-2 control-label" for="directAccessGrantsEnabled">{{:: 'direct-access-grants-enabled' | translate}}</label>
|
||
|
<kc-tooltip>{{:: 'direct-access-grants-enabled.tooltip' | translate}}</kc-tooltip>
|
||
|
<div class="col-md-6">
|
||
|
<input ng-model="clientEdit.directAccessGrantsEnabled" name="directAccessGrantsEnabled" id="directAccessGrantsEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="protocol == 'openid-connect' && !clientEdit.publicClient && !clientEdit.bearerOnly">
|
||
|
<label class="col-md-2 control-label" for="serviceAccountsEnabled">{{:: 'service-accounts-enabled' | translate}}</label>
|
||
|
<kc-tooltip>{{:: 'service-accounts-enabled.tooltip' | translate}}</kc-tooltip>
|
||
|
<div class="col-md-6">
|
||
|
<input ng-model="clientEdit.serviceAccountsEnabled" name="serviceAccountsEnabled" id="serviceAccountsEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="protocol == 'openid-connect' && !clientEdit.publicClient && !clientEdit.bearerOnly">
|
||
|
<label class="col-md-2 control-label" for="authorizationServicesEnabled">{{:: 'authz-authorization-services-enabled' | translate}}</label>
|
||
|
<kc-tooltip>{{:: 'authz-authorization-services-enabled.tooltip' | translate}}</kc-tooltip>
|
||
|
<div class="col-md-6">
|
||
|
<input ng-model="clientEdit.authorizationServicesEnabled" name="authorizationServicesEnabled" id="authorizationServicesEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlAuthnStatement">{{:: 'include-authnstatement' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="samlAuthnStatement" ng-click="switchChange()" name="samlAuthnStatement" id="samlAuthnStatement" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'include-authnstatement.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlOneTimeUseCondition">{{:: 'include-onetimeuse-condition' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="samlOneTimeUseCondition" ng-click="switchChange()" name="samlOneTimeUseCondition" id="samlOneTimeUseCondition" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'include-onetimeuse-condition.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlServerSignature">{{:: 'sign-documents' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="samlServerSignature" ng-click="switchChange()" name="samlServerSignature" id="samlServerSignature" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'sign-documents.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml' && samlServerSignature == true">
|
||
|
<label class="col-md-2 control-label" for="samlServerSignatureEnableKeyInfoExtension">{{:: 'sign-documents-redirect-enable-key-info-ext' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="samlServerSignatureEnableKeyInfoExtension" ng-click="switchChange()" name="samlServerSignatureEnableKeyInfoExtension" id="samlServerSignatureEnableKeyInfoExtension" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'sign-documents-redirect-enable-key-info-ext.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlAssertionSignature">{{:: 'sign-assertions' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="samlAssertionSignature" ng-click="switchChange()" name="samlAssertionSignature" id="samlAssertionSignature" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'sign-assertions.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="(samlAssertionSignature || samlServerSignature) && protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="signatureAlgorithm">{{:: 'signature-algorithm' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="signatureAlgorithm"
|
||
|
ng-change="changeAlgorithm()"
|
||
|
ng-model="signatureAlgorithm"
|
||
|
ng-options="alg for alg in signatureAlgorithms">
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'signature-algorithm.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="(samlAssertionSignature || samlServerSignature) && protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlSigKeyNameTranformer">{{:: 'saml-signature-keyName-transformer' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="xmlKeyNameTranformer"
|
||
|
ng-change="changeSamlSigKeyNameTranformer()"
|
||
|
ng-model="samlXmlKeyNameTranformer"
|
||
|
ng-options="alg for alg in xmlKeyNameTranformers">
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'saml-signature-keyName-transformer.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="(samlAssertionSignature || samlServerSignature) && protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="canonicalization">{{:: 'canonicalization-method' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="canonicalization"
|
||
|
ng-model="clientEdit.attributes['saml_signature_canonicalization_method']"
|
||
|
ng-options="canon.value as canon.name for canon in canonicalization">
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'canonicalization-method.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlEncrypt">{{:: 'encrypt-assertions' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="samlEncrypt" ng-click="switchChange()" name="samlEncrypt" id="samlEncrypt" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'encrypt-assertions.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlClientSignature">{{:: 'client-signature-required' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="samlClientSignature" ng-click="switchChange()" name="samlClientSignature" id="samlClientSignature" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client-signature-required.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlForcePostBinding">{{:: 'force-post-binding' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="samlForcePostBinding" ng-click="switchChange()" name="samlForcePostBinding" id="samlForcePostBinding" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'force-post-binding.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="frontchannelLogout">{{:: 'front-channel-logout' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="clientEdit.frontchannelLogout" name="frontchannelLogout" id="frontchannelLogout" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'front-channel-logout.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlForceNameIdFormat">{{:: 'force-name-id-format' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="samlForceNameIdFormat" ng-click="switchChange()" name="samlForceNameIdFormat" id="samlForceNameIdFormat" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'force-name-id-format.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlNameIdFormat">{{:: 'name-id-format' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="samlNameIdFormat"
|
||
|
ng-change="changeNameIdFormat()"
|
||
|
ng-model="nameIdFormat"
|
||
|
ng-options="format for format in nameIdFormats">
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'name-id-format.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group" data-ng-show="!clientEdit.bearerOnly && protocol != 'docker-v2'">
|
||
|
<label class="col-md-2 control-label" for="rootUrl">{{:: 'root-url' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input class="form-control" type="text" name="rootUrl" id="rootUrl" data-ng-model="clientEdit.rootUrl">
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'root-url.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group clearfix block" data-ng-hide="clientEdit.bearerOnly || (!clientEdit.standardFlowEnabled && !clientEdit.implicitFlowEnabled) || protocol == 'docker-v2'">
|
||
|
<label class="col-md-2 control-label" for="newRedirectUri"><span class="required" data-ng-show="protocol != 'saml'">*</span> {{:: 'valid-redirect-uris' | translate}}</label>
|
||
|
|
||
|
<div class="col-sm-6">
|
||
|
<div class="input-group" ng-repeat="(i, redirectUri) in clientEdit.redirectUris track by $index">
|
||
|
<input class="form-control" ng-model="clientEdit.redirectUris[i]">
|
||
|
<div class="input-group-btn">
|
||
|
<button class="btn btn-default" type="button" data-ng-click="deleteRedirectUri($index)"><span class="fa fa-minus"></span></button>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<div class="input-group">
|
||
|
<input class="form-control" ng-model="newRedirectUri" id="newRedirectUri">
|
||
|
<div class="input-group-btn">
|
||
|
<button class="btn btn-default" type="button" data-ng-click="newRedirectUri.length > 0 && addRedirectUri()"><span class="fa fa-plus"></span></button>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<kc-tooltip>{{:: 'valid-redirect-uris.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group" data-ng-show="!clientEdit.bearerOnly && protocol != 'docker-v2'">
|
||
|
<label class="col-md-2 control-label" for="baseUrl">{{:: 'base-url' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input class="form-control" type="text" name="baseUrl" id="baseUrl" data-ng-model="clientEdit.baseUrl">
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'base-url.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-hide="protocol == 'saml' || protocol == 'docker-v2'">
|
||
|
<label class="col-md-2 control-label" for="adminUrl">{{:: 'admin-url' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input class="form-control" type="text" name="adminUrl" id="adminUrl"
|
||
|
data-ng-model="clientEdit.adminUrl">
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'admin-url.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="masterSamlUrl">{{:: 'master-saml-processing-url' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input class="form-control" type="text" name="masterSamlUrl" id="masterSamlUrl"
|
||
|
data-ng-model="clientEdit.adminUrl">
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'master-saml-processing-url.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="urlReferenceName">{{:: 'idp-sso-url-ref' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="clientEdit.attributes.saml_idp_initiated_sso_url_name" class="form-control" type="text" name="urlReferenceName" id="urlReferenceName" />
|
||
|
<div data-ng-show="clientEdit.attributes.saml_idp_initiated_sso_url_name">
|
||
|
{{:: 'idp-sso-url-ref.urlhint' | translate}} {{samlIdpInitiatedUrl(clientEdit.attributes.saml_idp_initiated_sso_url_name)}}
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'idp-sso-url-ref.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="idpInitiatedRelayState">{{:: 'idp-sso-relay-state' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="clientEdit.attributes.saml_idp_initiated_sso_relay_state" class="form-control" type="text" name="idpInitiatedRelayState" id="idpInitiatedRelayState" />
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'idp-sso-relay-state.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="(!clientEdit.bearerOnly && protocol == 'openid-connect') && (clientEdit.standardFlowEnabled || clientEdit.directAccessGrantsEnabled || clientEdit.implicitFlowEnabled)">
|
||
|
<label class="col-md-2 control-label" for="newWebOrigin">{{:: 'web-origins' | translate}}</label>
|
||
|
|
||
|
<div class="col-sm-6">
|
||
|
<div class="input-group" ng-repeat="(i, webOrigin) in clientEdit.webOrigins track by $index">
|
||
|
<input class="form-control" ng-model="clientEdit.webOrigins[i]">
|
||
|
<div class="input-group-btn">
|
||
|
<button class="btn btn-default" type="button" data-ng-click="deleteWebOrigin($index)"><span class="fa fa-minus"></span></button>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<div class="input-group">
|
||
|
<input class="form-control" ng-model="newWebOrigin" id="newWebOrigin">
|
||
|
<div class="input-group-btn">
|
||
|
<button class="btn btn-default" type="button" data-ng-click="newWebOrigin.length > 0 && addWebOrigin()"><span class="fa fa-plus"></span></button>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<kc-tooltip>{{:: 'web-origins.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
</fieldset>
|
||
|
<fieldset data-ng-show="protocol == 'saml'">
|
||
|
<legend collapsed><span class="text">{{:: 'fine-saml-endpoint-conf' | translate}}</span> <kc-tooltip>{{:: 'fine-saml-endpoint-conf.tooltip' | translate}}</kc-tooltip></legend>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="consumerServicePost">{{:: 'assertion-consumer-post-binding-url' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="clientEdit.attributes.saml_assertion_consumer_url_post" class="form-control" type="text" name="consumerServicePost" id="consumerServicePost" />
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'assertion-consumer-post-binding-url.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="consumerServiceRedirect">{{:: 'assertion-consumer-redirect-binding-url' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="clientEdit.attributes.saml_assertion_consumer_url_redirect" class="form-control" type="text" name="consumerServiceRedirect" id="consumerServiceRedirect" />
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'assertion-consumer-redirect-binding-url.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="logoutPostBinding">{{:: 'logout-service-post-binding-url' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="clientEdit.attributes.saml_single_logout_service_url_post" class="form-control" type="text" name="logoutPostBinding" id="logoutPostBinding" />
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'logout-service-post-binding-url.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="logoutPostBinding">{{:: 'logout-service-redir-binding-url' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="clientEdit.attributes.saml_single_logout_service_url_redirect" class="form-control" type="text" name="logoutRedirectBinding" id="logoutRedirectBinding" />
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'logout-service-redir-binding-url.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
</fieldset>
|
||
|
|
||
|
<fieldset data-ng-show="protocol == 'openid-connect'">
|
||
|
<legend collapsed><span class="text">{{:: 'fine-oidc-endpoint-conf' | translate}}</span> <kc-tooltip>{{:: 'fine-oidc-endpoint-conf.tooltip' | translate}}</kc-tooltip></legend>
|
||
|
|
||
|
<div class="form-group clearfix block">
|
||
|
<label class="col-md-2 control-label" for="accessTokenSignedResponseAlg">{{:: 'access-token-signed-response-alg' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="accessTokenSignedResponseAlg"
|
||
|
ng-change="changeAccessTokenSignedResponseAlg()"
|
||
|
ng-model="accessTokenSignedResponseAlg">
|
||
|
<option value=""></option>
|
||
|
<option ng-repeat="provider in serverInfo.listProviderIds('signature')" value="{{provider}}">{{provider}}</option>
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'access-token-signed-response-alg.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group clearfix block">
|
||
|
<label class="col-md-2 control-label" for="idTokenSignedResponseAlg">{{:: 'id-token-signed-response-alg' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="idTokenSignedResponseAlg"
|
||
|
ng-change="changeIdTokenSignedResponseAlg()"
|
||
|
ng-model="idTokenSignedResponseAlg">
|
||
|
<option value=""></option>
|
||
|
<option ng-repeat="provider in serverInfo.listProviderIds('signature')" value="{{provider}}">{{provider}}</option>
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'id-token-signed-response-alg.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group clearfix block">
|
||
|
<label class="col-md-2 control-label" for="idTokenEncryptedResponseAlg">{{:: 'id-token-encrypted-response-alg' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="idTokenEncryptedResponseAlg"
|
||
|
ng-change="changeIdTokenEncryptedResponseAlg()"
|
||
|
ng-model="idTokenEncryptedResponseAlg">
|
||
|
<option value=""></option>
|
||
|
<option ng-repeat="provider in serverInfo.listProviderIds('cekmanagement')" value="{{provider}}">{{provider}}</option>
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'id-token-encrypted-response-alg.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group clearfix block">
|
||
|
<label class="col-md-2 control-label" for="idTokenEncryptedResponseEnc">{{:: 'id-token-encrypted-response-enc' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="idTokenEncryptedResponseEnc"
|
||
|
ng-change="changeIdTokenEncryptedResponseEnc()"
|
||
|
ng-model="idTokenEncryptedResponseEnc">
|
||
|
<option value=""></option>
|
||
|
<option ng-repeat="provider in serverInfo.listProviderIds('contentencryption')" value="{{provider}}">{{provider}}</option>
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'id-token-encrypted-response-enc.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group clearfix block">
|
||
|
<label class="col-md-2 control-label" for="userInfoSignedResponseAlg">{{:: 'user-info-signed-response-alg' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="userInfoSignedResponseAlg"
|
||
|
ng-change="changeUserInfoSignedResponseAlg()"
|
||
|
ng-model="userInfoSignedResponseAlg">
|
||
|
<option value="unsigned">unsigned</option>
|
||
|
<option ng-repeat="provider in serverInfo.listProviderIds('signature')" value="{{provider}}">{{provider}}</option>
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'user-info-signed-response-alg.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'openid-connect'">
|
||
|
<label class="col-md-2 control-label" for="requestObjectSignatureAlg">{{:: 'request-object-signature-alg' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="requestObjectSignatureAlg"
|
||
|
ng-change="changeRequestObjectSignatureAlg()"
|
||
|
ng-model="requestObjectSignatureAlg">
|
||
|
<option value="any">any</option>
|
||
|
<option value="none">none</option>
|
||
|
<option ng-repeat="provider in serverInfo.listProviderIds('clientSignature')" value="{{provider}}">{{provider}}</option>
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'request-object-signature-alg.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'openid-connect'">
|
||
|
<label class="col-md-2 control-label" for="changeRequestObjectRequired">{{:: 'request-object-required' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="requestObjectRequired"
|
||
|
ng-change="changeRequestObjectRequired()"
|
||
|
ng-model="requestObjectRequired"
|
||
|
ng-options="sig for sig in requestObjectRequiredOptions">
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'request-object-required.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
</fieldset>
|
||
|
|
||
|
<fieldset data-ng-show="protocol == 'openid-connect'">
|
||
|
<legend collapsed><span class="text">{{:: 'oidc-compatibility-modes' | translate}}</span> <kc-tooltip>{{:: 'oidc-compatibility-modes.tooltip' | translate}}</kc-tooltip></legend>
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'openid-connect'">
|
||
|
<label class="col-md-2 control-label" for="excludeSessionStateFromAuthResponse">{{:: 'exclude-session-state-from-auth-response' | translate}}</label>
|
||
|
<div class="col-md-6">
|
||
|
<input ng-model="excludeSessionStateFromAuthResponse" ng-click="switchChange()" name="excludeSessionStateFromAuthResponse" id="excludeSessionStateFromAuthResponse" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'exclude-session-state-from-auth-response.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
</fieldset>
|
||
|
|
||
|
<fieldset>
|
||
|
<legend collapsed><span class="text">{{:: 'advanced-client-settings' | translate}}</span> <kc-tooltip>{{:: 'advanced-client-settings.tooltip' | translate}}</kc-tooltip></legend>
|
||
|
|
||
|
<div class="form-group" data-ng-show="protocol == 'openid-connect'">
|
||
|
<label class="col-md-2 control-label" for="accessTokenLifespan">{{:: 'access-token-lifespan' | translate}}</label>
|
||
|
|
||
|
<div class="col-md-6 time-selector">
|
||
|
<input class="form-control" type="number" min="-1"
|
||
|
max="31536000" data-ng-model="accessTokenLifespan.time"
|
||
|
id="accessTokenLifespan" name="accessTokenLifespan"
|
||
|
data-ng-change="updateTimeouts()"/>
|
||
|
<select class="form-control" name="accessTokenLifespanUnit" data-ng-model="accessTokenLifespan.unit" data-ng-change="updateTimeouts()">
|
||
|
<option value="Minutes">{{:: 'minutes' | translate}}</option>
|
||
|
<option value="Hours">{{:: 'hours' | translate}}</option>
|
||
|
<option value="Days">{{:: 'days' | translate}}</option>
|
||
|
</select>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'access-token-lifespan.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group" data-ng-show="protocol == 'saml'">
|
||
|
<label class="col-md-2 control-label" for="samlAssertionLifespan">{{:: 'saml-assertion-lifespan' | translate}}</label>
|
||
|
|
||
|
<div class="col-md-6 time-selector">
|
||
|
<input class="form-control" type="number" min="1"
|
||
|
max="31536000" data-ng-model="samlAssertionLifespan.time"
|
||
|
id="samlAssertionLifespan" name="samlAssertionLifespan"
|
||
|
data-ng-change="updateAssertionLifespan()"/>
|
||
|
<select class="form-control" name="samlAssertionLifespanUnit" data-ng-model="samlAssertionLifespan.unit" data-ng-change="updateAssertionLifespan()">
|
||
|
<option value="Minutes">{{:: 'minutes' | translate}}</option>
|
||
|
<option value="Hours">{{:: 'hours' | translate}}</option>
|
||
|
<option value="Days">{{:: 'days' | translate}}</option>
|
||
|
</select>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'saml-assertion-lifespan.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group" data-ng-show="protocol == 'openid-connect'">
|
||
|
<label class="col-md-2 control-label" for="clientSessionIdleTimeout">{{:: 'client-session-idle' | translate}}</label>
|
||
|
<div class="col-md-6 time-selector">
|
||
|
<input class="form-control" type="number" min="0"
|
||
|
max="31536000" data-ng-model="clientSessionIdleTimeout.time"
|
||
|
id="clientSessionIdleTimeout" name="clientSessionIdleTimeout"
|
||
|
data-ng-change="updateClientSessionIdleTimeout()"/>
|
||
|
<select class="form-control" name="clientSessionIdleTimeoutUnit" data-ng-model="clientSessionIdleTimeout.unit" data-ng-change="updateClientSessionIdleTimeout()">
|
||
|
<option value="Minutes">{{:: 'minutes' | translate}}</option>
|
||
|
<option value="Hours">{{:: 'hours' | translate}}</option>
|
||
|
<option value="Days">{{:: 'days' | translate}}</option>
|
||
|
</select>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client-session-idle.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group" data-ng-show="protocol == 'openid-connect'">
|
||
|
<label class="col-md-2 control-label" for="clientSessionMaxLifespan">{{:: 'client-session-max' | translate}}</label>
|
||
|
<div class="col-md-6 time-selector">
|
||
|
<input class="form-control" type="number" min="0"
|
||
|
max="31536000" data-ng-model="clientSessionMaxLifespan.time"
|
||
|
id="clientSessionMaxLifespan" name="clientSessionMaxLifespan"
|
||
|
data-ng-change="updateClientSessionMaxLifespan()"/>
|
||
|
<select class="form-control" name="clientSessionMaxLifespanUnit" data-ng-model="clientSessionMaxLifespan.unit" data-ng-change="updateClientSessionMaxLifespan()">
|
||
|
<option value="Minutes">{{:: 'minutes' | translate}}</option>
|
||
|
<option value="Hours">{{:: 'hours' | translate}}</option>
|
||
|
<option value="Days">{{:: 'days' | translate}}</option>
|
||
|
</select>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'client-session-max.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'openid-connect'">
|
||
|
<label class="col-md-2 control-label" for="tlsClientCertificateBoundAccessTokens">{{:: 'tls-client-certificate-bound-access-tokens' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<input ng-model="tlsClientCertificateBoundAccessTokens" ng-click="switchChange()" name="tlsClientCertificateBoundAccessTokens" id="tlsClientCertificateBoundAccessTokens" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'tls-client-certificate-bound-access-tokens.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
|
||
|
<div class="form-group clearfix block" data-ng-show="protocol == 'openid-connect'">
|
||
|
<label class="col-md-2 control-label" for="changePkceCodeChallengeMethod">{{:: 'pkce-code-challenge-method' | translate}}</label>
|
||
|
<div class="col-sm-6">
|
||
|
<div>
|
||
|
<select class="form-control" id="pkceCodeChallengeMethod"
|
||
|
ng-change="changePkceCodeChallengeMethod()"
|
||
|
ng-model="pkceCodeChallengeMethod"
|
||
|
ng-options="method for method in changePkceCodeChallengeMethodOptions">
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'pkce-code-challenge-method.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
</fieldset>
|
||
|
|
||
|
<fieldset>
|
||
|
<legend collapsed><span class="text">{{:: 'client-flow-bindings' | translate}}</span> <kc-tooltip>{{:: 'client-flow-bindings.tooltip' | translate}}</kc-tooltip></legend>
|
||
|
<div class="form-group">
|
||
|
<label for="browser" class="col-md-2 control-label">{{:: 'browser-flow' | translate}}</label>
|
||
|
<div class="col-md-2">
|
||
|
<div>
|
||
|
<select id="browser" data-ng-model="clientEdit.authenticationFlowBindingOverrides['browser']" class="form-control" ng-options="flow.id as flow.alias for flow in flows">
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'browser-flow.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
<div class="form-group" data-ng-show="protocol == 'openid-connect'">
|
||
|
<label for="grant" class="col-md-2 control-label">{{:: 'direct-grant-flow' | translate}}</label>
|
||
|
<div class="col-md-2">
|
||
|
<div>
|
||
|
<select id="grant" ng-model="clientEdit.authenticationFlowBindingOverrides['direct_grant']" class="form-control" ng-options="flow.id as flow.alias for flow in flows">
|
||
|
</select>
|
||
|
</div>
|
||
|
</div>
|
||
|
<kc-tooltip>{{:: 'direct-grant-flow.tooltip' | translate}}</kc-tooltip>
|
||
|
</div>
|
||
|
</fieldset>
|
||
|
|
||
|
|
||
|
|
||
|
<div class="form-group">
|
||
|
<div class="col-md-10 col-md-offset-2" data-ng-show="client.access.configure">
|
||
|
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
|
||
|
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
|
||
|
</div>
|
||
|
</div>
|
||
|
</form>
|
||
|
</div>
|
||
|
|
||
|
<kc-menu></kc-menu>
|