E-tapatybių informacijos tvarkyklės instrukcijos IT specialistams

Iš LITNET WIKI.
Peršokti į: navigacija, paiešką

TECHNINĖ DOKUMENTACIJA

Užklausų sritis tapatybių valdymo sistemoje prieinama skiltyje Konfigūravimas/Užklausų sritis. Čia galima vykdyti užklausas pagal įvairius filtrus, rezultate gaunant tam tikrus objektus (naudotojus, organizacijas ir t.t.). Žemiau pateikti galimi užklausų pavyzdžiai.

Naudotojų paieška organizacijos šakoje

Čia pateiktas pavyzdys, kaip gauti visus pašto naudotojus, esančius bendrojo ugdymo mokyklose (oid:efaf7bbb-ab27-4185-81a0-b188e6937f04).

<query>
    <filter>
        <and>
            <equal>
            <matching>polyStringNorm</matching>
            <path>givenName</path>
            <value>mail</value>
        </equal>
        <org>
            <orgRef>
                <oid>efaf7bbb-ab27-4185-81a0-b188e6937f04</oid>
            </orgRef>
            <maxDepth>unbounded</maxDepth>
        </org>
        </and>
    </filter>  
</query>


Midpoint REST API

Midpoint REST API galimas užklausas ir jų veikimą galima peržiūrėti šioje programinio kodo dalyje: https://github.com/Evolveum/midpoint/blob/master/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/ModelRestService.java

Midpoint aplinkoje per REST API sąsają galima vykdyti programinį kodą. Tokiu atveju atliekama POST užklausa adresu: [MIDPOINT_REST_URL]/rpc/executeScript Naudotojo kūrimo pavyzdys

<?xml version='1.0' encoding='UTF-8'?>
<scext:executeScript xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:scext="http://midpoint.evolveum.com/xml/ns/public/model/scripting/extension-3">
	<s:action>
		<s:type>add</s:type>
		<s:parameter>
            <s:name>options</s:name>
            <c:value xsi:type="c:ModelExecuteOptionsType">
                <partialProcessing>
                    <inbound>skip</inbound>
	                <objectTemplateBeforeAssignments>skip</objectTemplateBeforeAssignments>
	                <objectTemplateAfterAssignments>skip</objectTemplateAfterAssignments>
	                <projection>skip</projection>
	                <approvals>skip</approvals>

                </partialProcessing>
            </c:value>
        </s:parameter>
	</s:action>
	<s:input>
		<s:value xsi:type="c:UserType">
			<c:name>testes88</c:name>
			<c:givenName>test</c:givenName>
			<c:familyName>test</c:familyName>
		</s:value>
	</s:input>
</scext:executeScript>

Masiniai veiksmai

Masinių veiksmų sritis tapatybių valdymo sistemoje yra skirta vienkartinių operacijų atlikimui su daugeliu objektų.

Besidubliuojančių naudotojų aptikimas

<s:executeScript xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3"
           xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <s:search xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3">
	<s:type>c:UserType</s:type>
        <s:action>
            <s:type>execute-script</s:type>
            <s:parameter>
                <s:name>script</s:name>
                <c:value>
                    <c:code>	
                        if (!basic.isEmpty(input.fullName)) {
                	    	if (!midpoint.isUniquePropertyValue(input, 'fullName', input.getFullName().getOrig())){
                			   conflict = midpoint.getObjectsInConflictOnPropertyValue(input, "fullName", input.getFullName().getOrig(), false)
                			   log.info("USER_MERGE: User: " + input.name + " ; in conflict with user: "+conflict.name);
                			} else {
                				log.info("USER_MERGE: User: " + input.name + " has no conflicting user.");
                			}
                		} else {
                		    	log.info("USER_MERGE: User: " + input.name + " has no full name.");
                		}
                    </c:code>
                </c:value>
            </s:parameter>
        </s:action>
</s:search>
</s:executeScript>

Nurodyto administratriaus sukurtų naudotojų sąrašas

<s:executeScript xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3"
                 xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
                 xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:api="http://midpoint.evolveum.com/xml/ns/public/common/api-types-3"
                 xmlns:t="http://prism.evolveum.com/xml/ns/public/types-3">
<s:search>
      <s:type>UserType</s:type>
      <s:searchFilter>
          <ref>
            <matching>polyStringNorm</matching>         <!-- normalized (case insensitive) -->
            <path>metadata/creatorRef</path>
            <value oid="253a44a7-e4d7-4d63-a3d1-5b4faea275b2" />
        </ref>
      </s:searchFilter>
      <s:action>
        <s:type>log</s:type>
    </s:action>
</s:search>
</s:executeScript>

Neapdorotų paskyrų perskaičiavimas

Šis masinis veiksmas perskaičiuoja tik tuos naudotojus, kurie dar neturi sąryšio su LDAP.

<scext:executeScript xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
         xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
         xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3"
         xmlns:t="http://prism.evolveum.com/xml/ns/public/types-3"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:scext="http://midpoint.evolveum.com/xml/ns/public/model/scripting/extension-3">
    <s:search xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3">
        <s:type>c:UserType</s:type>
        <s:action>
            <s:type>execute-script</s:type>
            <s:parameter>
                <s:name>script</s:name>
                <c:value xsi:type="c:ScriptExpressionEvaluatorType">
                    <c:code>
                        import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
                        if (input.getLinkRef().size() == 0) {
                            midpoint.recompute(UserType.class, input.oid)
                            log.info('Recomputing user: {}', input.name)
                        }
                    </c:code>
                </c:value>
            </s:parameter>
        </s:action>
    </s:search>
</scext:executeScript>

Vienos rolės priskyrimas kitą rolę turintiems naudotojams

<s:executeScript xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3"
                 xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
                 xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:api="http://midpoint.evolveum.com/xml/ns/public/common/api-types-3"
                 xmlns:t="http://prism.evolveum.com/xml/ns/public/types-3">
<s:search>
      <s:type>UserType</s:type>
      <s:searchFilter>
          <ref>
           <path>assignment/targetRef</path>
           <value>
             <oid>951a16e9-25d4-4f21-bff5-eafebd0dd1f0</oid> <!-- Rolė pagal kurią ieškoma naudotojų -->
           </value>
         </ref>
      </s:searchFilter>
      <s:action>
        <s:type>modify</s:type>
        <s:parameter>
            <s:name>delta</s:name>
            <c:value xsi:type="t:ObjectDeltaType">
                <t:changeType>modify</t:changeType>     <!-- this is the default, can be omitted -->
                <!-- objectType and oid are taken from the object being modified -->
                <t:itemDelta>
                    <t:modificationType>add</t:modificationType>
                    <t:path>c:assignment</t:path>
                    <t:value xsi:type="c:AssignmentType">
                        <targetRef oid="8466c680-d815-4579-8d9c-a66b8eb6a348" type="c:RoleType"/> <!-- Priskiriama rolė -->
                    </t:value>
                </t:itemDelta>
            </c:value>
        </s:parameter>
    </s:action>
</s:search>
</s:executeScript>

Laiškų išsiuntimas naudotojams

Žemiau pateiktas sukurtų sistemos naudotojų aktyvavimo scenarijus. Pagal filtrą parinktiems naudotojams (šiuo atveju "Litnet" naudotojai) išsiunčiami laiškai su sugeneruotomis aktyvavimo nuorodomis.

<s:executeScript xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3"
                 xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
                 xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:api="http://midpoint.evolveum.com/xml/ns/public/common/api-types-3">
   <s:pipeline list="true" >
      <s:sequence list="true">
        <s:search xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="s:SearchExpressionType">
          <s:type>UserType</s:type>
          <s:searchFilter>
            <equal>
              <path>organization</path>
              <value>litnet</value>
            </equal>
          </s:searchFilter>
          <s:action>
                  <s:type>generate-value</s:type>
                  <s:parameter>
                      <s:name>items</s:name>
                      <c:value xsi:type="api:PolicyItemsDefinitionType">
                          <api:policyItemDefinition>
                              <api:target>
                                  <api:path>credentials/nonce/value</api:path>
                              </api:target>
                              <api:execute>true</api:execute>
                          </api:policyItemDefinition>
                      </c:value>
                  </s:parameter>
              </s:action>
          </s:search>
      </s:sequence>
      <s:sequence list="true">
          <s:search>
              <s:type>UserType</s:type>
              <s:searchFilter>
                  <q:equal>
                      <q:path>name</q:path>
                      <value>jusumb</value>
                  </q:equal>
              </s:searchFilter>
              <s:action>
              <s:type>notify</s:type>
              <s:parameter>
      			<s:name>handler</s:name>
      			<c:value xsi:type="c:EventHandlerType">
      				<c:generalNotifier>
      					<c:recipientExpression>
      						<c:script>
      						    <code>return event.object.asObjectable().getEmailAddress()</code>
      						</c:script>
      					</c:recipientExpression>
      					<subjectExpression>
      					    <value>Tapatybių valdymo sistemos naudotojo aktyvacija</value>
      					</subjectExpression>
      					<c:bodyExpression>
      						<c:script>
      							<code>
                        link = midpoint.createPasswordResetLink(event.object.asObjectable())
                        bodyMessage = "Sveiki,\n\n" +
                        "Jums sukurta paskyra tapatybių valdymo sistemoje idm.litnet.lt.\n"+
                        "Norėdami aktyvuoti paskyrą, paspauskite ant nuorodos: \n" + link +
                        "\nJūsų prisijungimo vardas: " + event.object.asObjectable().getName()

                        return bodyMessage;
                    </code>
      						</c:script>
      					</c:bodyExpression>
      					<c:transport>mail</c:transport>
      				</c:generalNotifier>
      			</c:value>
      		</s:parameter>
          </s:action>
          </s:search>
      </s:sequence>
  </s:pipeline>
</s:executeScript>

Sekančiame pavyzdyje atliekamas el. laiškų siuntimas į Litnet pašto klientų dežutes (naudojamas ne įprastas Midpoint naudotojo atributas emailAddress, bet papildomai sukurtas atributas emailAddresses, kuris gali talpinti daugiau nei vieną reikšmę).

<s:executeScript xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3"
                 xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
                 xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:api="http://midpoint.evolveum.com/xml/ns/public/common/api-types-3">

  <s:search>
      <s:type>UserType</s:type>
      <s:searchFilter>
          <ref>
           <path>assignment/targetRef</path>
           <value>
             <oid>951a16e9-25d4-4f21-bff5-eafebd0dd1f0</oid>
           </value>
         </ref>
      </s:searchFilter>
      <s:action>
      <s:type>notify</s:type>
      <s:parameter>
  		<s:name>handler</s:name>
  		<c:value xsi:type="c:EventHandlerType">
  			<c:generalNotifier>
  				<c:recipientExpression>
  					<c:script>
  					    <code>
  					        import com.evolveum.midpoint.prism.path.ItemPath;
  					        import java.util.ArrayList;
  					        return new ArrayList<String>(event.object.asObjectable().getExtension().asPrismContainerValue().findProperty(new ItemPath("emailAddresses")).getRealValues());
  					    </code>
  					</c:script>
  				</c:recipientExpression>
  				<subjectExpression>
  				    <value>IDM testinis laiškas</value>
  				</subjectExpression>
  				<c:bodyExpression>
  					<c:script>
  						<code>
                
                bodyMessage = "Sveiki,\n\n"  +
                "Pranešame, kad duomenų apsikeitimo protokolas TLS v1.0 nuo 2018 birželio 30 d. laikomas negaliojančiu ir nesaugiu. Liepos 11 dieną  šis protokolas LITNET tinklo paslaugų tarnybinėse stotyse buvo išjungtas. Jei jūsų naršyklė ar el. pašto programa naudoja TLS v1.0 protokolą, jūs negalėsite naudotis LITNET paslaugomis.  Tokiu atveju rekomenduojame atnaujinti naudojamą klientinę pašto programą ar naršyklę, jeigu tokios galimybės nėra, pasirinkti kitą programą, kuri būtų saugi.\n"+
                "Instrukcijas rasite čia https://www.lm.lt/tinklo-naujienos/176-nepalaikomas-tls-v1-0";

                return bodyMessage;
            </code>
  					</c:script>
  				</c:bodyExpression>
  				<c:transport>mail</c:transport>
  			</c:generalNotifier>
  		</c:value>
  	</s:parameter>
  </s:action>
  </s:search>
</s:executeScript>