# ElsevierSP

## Speciális eduPersonTargetedID kiadásának beállítása


### Shibboleth IdP alatt

	vim [/path/to]/shibboleth-idp/conf/attribute-resolver.xml

Szúrjuk be az alábbi attribútumdefiníciót, ahol

* a `scope` értéke az intézményi scope (ugyanaz, amit pl. az eduPersonPrincipalName attribútum előállításakor is használ)
* a `sourceAttributeID` értéke a persistent nameID-t előállító attribútum id-je

```php
    <!-- Buggy edupersonTargetedId required for Elsevier: -->
    <resolver:AttributeDefinition id="elsevierId" xsi:type="Scoped" scope="niif.hu" sourceAttributeID="persistentId"
                                  xmlns="urn:mace:shibboleth:2.0:resolver:ad" >
      <resolver:Dependency ref="storedIdConnector" />
      <resolver:AttributeEncoder xsi:type="enc:SAML2ScopedString"
                                 name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" friendlyName="buggy-eduPersonTargetedID"
                                 xmlns="urn:mace:shibboleth:2.0:attribute:encoder" />
    </resolver:AttributeDefinition>
```

	vim [/path/to]/shibboleth-idp/conf/attribute-filter.xml

**Fontos**, hogy amennyiben az [ajánlásnak megfelelően](https://help.edu.hu/books/aai/page/shib2idpinstall) a [Resource Registry](https://help.edu.hu/books/aai/page/resource-registry) által előállított attribute filtert használjuk, akkor ne ezt a dinamikusan frissülő fájlt szerkesszük, hanem az attribute-filter-local.xml-t, és ebben a fájlban végezzük el az alábbi módosításokat.

1. Szúrjuk be az alábbi részletet, amely megmondja, hogy az Elsevier SP számára mely attribútumok adandók ki:

    ```xml
        <AttributeFilterPolicy id="buggy-eptid">
                <PolicyRequirementRule xsi:type="basic:AttributeRequesterString" value="https://sdauth.sciencedirect.com/" />
                <AttributeRule attributeID="elsevierId">
                    <PermitValueRule xsi:type="basic:ANY" />
                </AttributeRule>
                <AttributeRule attributeID="eduPersonScopedAffiliation">
                    <PermitValueRule xsi:type="basic:ANY" />
                </AttributeRule>
        </AttributeFilterPolicy>
    ```

2. A `releaseIDsToAnyone` alapértelmezett szabályt módosítsuk az alábbiakra:

    ```xml
        <!--  Release IDs to anyone -->
        <AttributeFilterPolicy id="releaseIDsToAnyone">
            <PolicyRequirementRule xsi:type="basic:NOT">
                    <basic:Rule xsi:type="basic:AttributeRequesterString" value="https://sdauth.sciencedirect.com/" />
            </PolicyRequirementRule>
            <AttributeRule attributeID="transientId">
                <PermitValueRule xsi:type="basic:ANY" />
            </AttributeRule>

            <AttributeRule attributeID="persistentId">
                <PermitValueRule xsi:type="basic:ANY" />
            </AttributeRule>

        </AttributeFilterPolicy>
    ```


Ez utóbbi módosításra azért van szükség, hogy a mindenki számára kiadható szabványos persistentID ne csapja felül ez Elsevier számára kiadandót.

### SimpleSAMLphp alatt

	vim [/path/to]/simplesaml/metadata/saml20-sp-remote.php

Beállítjuk, hogy csak az elsevier SP-je esetén az attribútum előállítás és kiadás folyamatát toldja meg még egy lépéssel. Ehhez szükséges, hogy a fenti fájlba vegyük fel állandó elemként az Elsevire SP metadatájának kiegészítéseként az alábbi PHP tömböt. Fontos, hogy a tömb egyes elemei előtt szereplő számok magasabbak legyenek, mint az IdP általános feloldási szabályainál megadott számok, de alacsonyabbak, mint a jellemzően a folyamat végén beállított 'name2oid' mappelések.

```php
$metadata['https://sdauth.sciencedirect.com/']['authproc'] = array (
               96 => array(
                        'class' => 'core:TargetedID'
               ),
               97 => array(
                       'class' => 'core:AttributeAlter',
                       'subject' => 'eduPersonTargetedID',
                       'pattern' => '/^.*$/',
                       'replacement' => '${0}@intezmenyiScope.hu',
               ),
);
```

A fenti kódrészlet annyit teszi, hogy újragenerálja az alapértelmezett eduPersonTargetedID-t egyszerű formában (csak a stringet, a NameID-s xml struktúra nélkül), majd mögé teszi az intézményi scope-ot. Fontos, hogy a megoldás feltételezi azt, hogy az Elsevier SP metadatájának további részei betöltésre kerülnek pl. a metarefresh modul által.