KNF:ADFS-SQL: verschil tussen versies

Uit Kennisnet Developers Documentatie
Ga naar: navigatie, zoeken
(Nieuwe pagina aangemaakt met '==SQL QUERY attributen aanmaken== Andere attributen die niet vanuit LDAP beschikbaar zijn, kunnen ook via een ‘SQL attribute’ store gegenereerd worden. Hiervoo...')
 
(SQL QUERY attributen aanmaken)
 
(16 tussenliggende versies door 2 gebruikers niet weergegeven)
Regel 3: Regel 3:
 
Andere attributen die niet vanuit LDAP beschikbaar zijn, kunnen ook via een ‘SQL attribute’ store gegenereerd worden. Hiervoor wordt een extra ‘Attribute Store’ voor SQL type aangemaakt. Zie bijvoorbeeld: SQL Attribute Stores
 
Andere attributen die niet vanuit LDAP beschikbaar zijn, kunnen ook via een ‘SQL attribute’ store gegenereerd worden. Hiervoor wordt een extra ‘Attribute Store’ voor SQL type aangemaakt. Zie bijvoorbeeld: SQL Attribute Stores
  
ILM_staging
+
*ILM_staging
o Deze gaat via de connectie string: Server=WVFIMP01;Database=ILM_staging;Integrated Security = True
+
**Deze gaat via de connectie string: Server=WVFIMP01;Database=ILM_staging;Integrated Security = True
  
[[Bestand:adfs-sql-01.png]]
+
[[Bestand:adfs-sql-01.png|600px]]
  
 
Het domein account dat de ADFS service draait (Zie onder service AD FS 2.0 Windows Service naar de Log On As) moet als login aangemaakt worden op de database server met leesrecht op de database (in dit geval op Drenthe College de ILM_staging database op de server WVFIMP01).
 
Het domein account dat de ADFS service draait (Zie onder service AD FS 2.0 Windows Service naar de Log On As) moet als login aangemaakt worden op de database server met leesrecht op de database (in dit geval op Drenthe College de ILM_staging database op de server WVFIMP01).
  
 
In de tabel dbo.studenten zijn uiteraard de volgende velden aanwezig:
 
In de tabel dbo.studenten zijn uiteraard de volgende velden aanwezig:
ObjectId, lokatie, klas, cohort, crebo, opleidingsnaam, geboortedatum, (en nog vele andere). Deze worden elk uur bij ons up-to-date gehouden vanuit de deelnemers administratie.
+
 
 +
''ObjectId, lokatie, klas, cohort, crebo, opleidingsnaam, geboortedatum, (en nog vele andere).''
 +
 
 +
Deze worden elk uur bij ons up-to-date gehouden vanuit de deelnemers administratie.
 
   
 
   
De attributen worden dan als volgt opgebouwd:
 
  
Open de ‘relying Party Trust’ en selecteer de trust waarvoor je de attributen wilt aanpassen. Kies voor ‘Edit Claim Rules’ en selecteer: ‘Send Claims Using a Custom Rule’
+
===De attributen worden dan als volgt opgebouwd===
 +
 
 +
* Open de '''‘relying Party Trust’''' en selecteer de trust waarvoor je de attributen wilt aanpassen.  
 +
* Kies voor '''‘Edit Claim Rules’''' en selecteer '''‘Send Claims Using a Custom Rule’'''
 +
 
  
 
'''nlEduPersonDepartment'''
 
'''nlEduPersonDepartment'''
In het venster voor de ‘Custom rule’ wordt het volgende ingevuld:
 
  
 +
In het venster voor de '''‘Custom rule’''' wordt het volgende ingevuld:
 +
 +
<syntaxhighlight lang="java">
 
c:[Type == "DC_SamId"]
 
c:[Type == "DC_SamId"]
=> issue(store = "ILM_staging",
+
  => issue(store = "ILM_staging",
types = ("nlEduPersonDepartment"),
+
    types = ("nlEduPersonDepartment"),
query = "SELECT lokatie as nlEduPersonDepartment
+
    query = "SELECT lokatie as nlEduPersonDepartment
from dbo.studenten  where ObjectID = {0}",
+
            from dbo.studenten  where ObjectID = {0}",
param = C.Value);
+
    param = C.Value);
 +
</syntaxhighlight>
 +
 
  
 
PS1: De regels moeten als een regel (‘oneliner’) zonder regeleinde ingevoerd worden in het veld Custom rule.
 
PS1: De regels moeten als een regel (‘oneliner’) zonder regeleinde ingevoerd worden in het veld Custom rule.
 +
 
PS2: as <attributename> kan weggelaten worden in de query's. Door de types = (“<attribute>”), wordt bepaald aan welk attribuut de gevonden waarde(n) gekoppeld moet worden.
 
PS2: as <attributename> kan weggelaten worden in de query's. Door de types = (“<attribute>”), wordt bepaald aan welk attribuut de gevonden waarde(n) gekoppeld moet worden.
  
[[Bestand:adfs-sql-02.png]]
+
[[Bestand:adfs-sql-02.png|600px]]
  
 
Bij het op [ OK ] klikken wordt op de achtergrond de syntax gecontroleerd.
 
Bij het op [ OK ] klikken wordt op de achtergrond de syntax gecontroleerd.
Direct hierna kan via (in dit geval uiteraard eerst de staging) gecontroleerd worden of het correct is. De URL hiervoor is: https://referentie-s.entree.kennisnet.nl/referentiesp
+
 
 +
Direct hierna kan via de Referentie Service Provider (in dit geval staging) gecontroleerd worden of het correct is.  
 +
 
 +
De URL hiervoor is: https://referentie-s.entree.kennisnet.nl/referentiesp
  
 
Als het goed gaat komt het standaard overzicht waarbij het attribuut netjes aanwezig is.
 
Als het goed gaat komt het standaard overzicht waarbij het attribuut netjes aanwezig is.
  
[[Bestand:adfs-sql-03.png]]
+
[[Bestand:adfs-sql-03.png|400px]]
  
 
Als de query niets oplevert, wordt het attribuut ook niet getoond in het overzicht.
 
Als de query niets oplevert, wordt het attribuut ook niet getoond in het overzicht.
 
   
 
   
Als er iets fout gaat, bijvoorbeeld er wordt een date of numeriek gegeven teruggestuurd, komt er een onduidelijke foutmelding van inlog naam, wachtwoord verkeerd. (Kennisnet gaat er bij de meeste attributen vanuit dat het een string is)
+
Als er iets fout gaat, bijvoorbeeld er wordt een date of numeriek gegeven teruggestuurd, komt er een foutmelding 'Authenticatie Mislukt' met o.a. gebruikersnaam of wachtwoord verkeerd. (Kennisnet gaat er bij de meeste attributen vanuit dat het een string is)
 +
 
 +
[[Bestand:adfs-sql-04.jpg|500px]]
  
[[Bestand:adfs-sql-04.jpg]]
 
  
 
Het is mij nog niet gelukt een logfile te vinden of in te stellen waarbij ik iets meer kan terugvinden. Het blijft dan ook gissen naar de oorzaak.
 
Het is mij nog niet gelukt een logfile te vinden of in te stellen waarbij ik iets meer kan terugvinden. Het blijft dan ook gissen naar de oorzaak.
  
Als de syntax van de claim rule verkeerd is komt daar wel een foutmelding van, bij het reeds opslaan van de claim rule.
+
Als de syntax van de claim rule verkeerd is komt daar wel een foutmelding van, bij het opslaan van de claim rule.
  
[[Bestand:adfs-sql-05.png]]
+
[[Bestand:adfs-sql-05.png|600px]]
  
 
Hierbij is de “ vergeten in …ObjectID = {0}", .
 
Hierbij is de “ vergeten in …ObjectID = {0}", .
Regel 56: Regel 71:
 
'''nlEduPersonUnit'''
 
'''nlEduPersonUnit'''
  
 +
<syntaxhighlight lang="java">
 
c:[Type == "DC_SamId"]
 
c:[Type == "DC_SamId"]
=> issue(store = "ILM_staging",
+
  => issue(store = "ILM_staging",
types = ("nlEduPersonUnit"),
+
    types = ("nlEduPersonUnit"),
query = "SELECT klas as nlEduPersonUnit from dbo.studenten
+
    query = "SELECT klas as nlEduPersonUnit from dbo.studenten
where ObjectID = {0}",
+
            where ObjectID = {0}",
param = C.Value);
+
    param = C.Value);
 +
</syntaxhighlight>
  
  
 
'''nlEduPersonCohort'''
 
'''nlEduPersonCohort'''
  
 +
<syntaxhighlight lang="java">
 
c:[Type == "DC_SamId"]
 
c:[Type == "DC_SamId"]
=> issue(store = "ILM_staging", types = ("nlEduPersonCohort"),
+
  => issue(store = "ILM_staging",  
query = "SELECT COALESCE('20'+ COHORT,'2014') as nlEduPersonCohort from dbo.studenten
+
    types = ("nlEduPersonCohort"),
where ObjectID = {0}", param = C.Value);
+
    query = "SELECT COALESCE('20'+ COHORT,'2014') as nlEduPersonCohort from dbo.studenten
 +
            where ObjectID = {0}",  
 +
    param = C.Value);
 +
</syntaxhighlight>
  
  
 
'''nlEduPersonProfile'''
 
'''nlEduPersonProfile'''
  
 +
<syntaxhighlight lang="java">
 
c:[Type == "DC_SamId"]
 
c:[Type == "DC_SamId"]
=> issue(store = "ILM_staging",
+
  => issue(store = "ILM_staging",
types = ("nlEduPersonProfile"),
+
    types = ("nlEduPersonProfile"),
query = "SELECT crebo + ' ' + Opleiding_naam as nlEduPersonProfile
+
    query = "SELECT crebo + ' ' + Opleiding_naam as nlEduPersonProfile from dbo.studenten   
from dbo.studenten  where ObjectID = {0}",
+
            where ObjectID = {0}",
param = C.Value);
+
    param = C.Value);
 +
</syntaxhighlight>
  
  
 
'''nlEduPersonBirthDate'''
 
'''nlEduPersonBirthDate'''
  
 +
<syntaxhighlight lang="java">
 
c:[Type == "DC_SamId"]
 
c:[Type == "DC_SamId"]
=> issue(store = "ILM_staging",
+
  => issue(store = "ILM_staging",
types = ("nlEduPersonBirthDate"),
+
    types = ("nlEduPersonBirthDate"),
query = "SELECT geboortedatum as nlEduPersonBirthDate from dbo.studenten
+
    query = "SELECT geboortedatum as nlEduPersonBirthDate from dbo.studenten
where ObjectID = {0}", param = C.Value);
+
            where ObjectID = {0}",  
 +
    param = C.Value);
 +
</syntaxhighlight>
  
Geboortedatum:
+
'''Geboortedatum'''
• Kennisnet wil ‘JJJJMMDD’ ontvangen (Zie AttributenOverzicht ).
 
Geboortedatum is namelijk een string geworden in onze databaseview met opmaak ‘DD-MM-JJJJ’.
 
Dus de select moet worden:  "SELECT CONVERT(NVARCHAR(10), cast(geboortedatum as date), 112)….
 
 
  
==Dynamische attributen aanmaken==
+
Kennisnet wil ‘JJJJMMDD’ ontvangen (Zie [[KNF:Attributen_overzicht_voor_Identity_Providers|Overzicht van '''Federatieve attributen''' voor Identity Providers]]).
  
In sommige gevallen is de inhoud van een attribuut afhankelijk van andere attributen. Bijvoorbeeld is de inlog van een student of van een medewerker.
+
Geboortedatum is namelijk een string geworden in onze databaseview met opmaak ‘DD-MM-JJJJ’.
 
 
'''nlEduPersonProfileId'''
 
Als de gebruiker een medewerker is, dan wordt nlEduPersonProfileId : <ObjectId>@medewerker.drenthecollege.nl
 
Als de gebruiker is deelnemer is dan wordt nlEduPersonProfileId : <EmployeeId>@student.drenthecollege.nl
 
Deze velden zijn niet als zodanig in LDAP beschikbaar, maar kunnen wel worden opgebouwd worden uit aanwezige velden.
 
 
 
Dynamisch gezien; nlEduPersonProfileId wordt : <sAMAccountName>@<nlEduPersonAffiliation>.drenthecollege.nl
 
Dit kun je opbouwen op de volgende manier:
 
We maken een attribute DC_SamId, via de add mogelijkheid.
 
We combineren een tweetal attributes (De nieuwe DC_SamId en een bestaande eduPersonAffiliation (In deze staat OF
 
student OF employee en zijn reeds eerder gemaakt, conform de Kennisnet handleiding aangaande Entree en attributen).
 
 
 
Maak twee custom Claimrule Attributen aan en pas de Claimrule voor Entree aan.
 
 
 
 
 
'''Add SamId'''
 
 
 
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
 
=> add(store = "Active Directory", types = ("DC_SamId"),
 
query = ";sAMAccountName;{0}",
 
param = c.Value);
 
 
 
 
 
'''nlEduPersinProfileId'''
 
 
 
C1:[Type == "DC_SamId"]
 
&& C2:[Type == "eduPersonAffiliation"]
 
=> issue(Type = "nlEduPersonProfileId", Value = C1.Value + "@" + C2.Value + ".drenthecollege.nl");
 
 
 
Binnen de bestaande Entree claimrule moet (voor onze school gegevens vanuit het AD) dan ook nog iets aangepast worden. EmployeeNumber haalt het id uit sAMAccountName dat is (op ons AD) voor student en employee het personeels- en deelnemer-nummer.
 
 
 
[[Bestand:adfs-sql-06.png]]
 
 
Als alles goed verlopen is krijg je bij de staging de volgende twee overzichten voor een deelnemer en medewerker.
 
 
 
Studenten inlog
 
[[Bestand:adfs-sql-07.jpg]]
 
 
 
Medewerker inlog
 
[[Bestand:adfs-sql-08.jpg]]
 
  
 +
Dus de select moet worden:  "SELECT CONVERT(NVARCHAR(10), cast(geboortedatum as date), 112)…
  
Jammer dat er niet een mogelijkheid is om claim rules binnen het ADFS te kopiëren naar andere Relying Party Trusts, je moet als alles goed gaat in de staging ze stuk voor stuk opnieuw aanmaken in de productie Trust.
 
  
 +
Auteur: Bert Barskè| Drenthe College
  
Met vriendelijke groet, Bert Barskè
+
[[Categorie:Entree Federatie]]
Drenthe College
 
Dienst ICT: Database beheer & Technisch applicatiebeheer mailto: B.Barske@drenthecollege.nl
 
Telefoon: 088 188 4637 / 088 188 4444
 

Huidige versie van 21 aug 2018 om 11:10

SQL QUERY attributen aanmaken

Andere attributen die niet vanuit LDAP beschikbaar zijn, kunnen ook via een ‘SQL attribute’ store gegenereerd worden. Hiervoor wordt een extra ‘Attribute Store’ voor SQL type aangemaakt. Zie bijvoorbeeld: SQL Attribute Stores

  • ILM_staging
    • Deze gaat via de connectie string: Server=WVFIMP01;Database=ILM_staging;Integrated Security = True

Adfs-sql-01.png

Het domein account dat de ADFS service draait (Zie onder service AD FS 2.0 Windows Service naar de Log On As) moet als login aangemaakt worden op de database server met leesrecht op de database (in dit geval op Drenthe College de ILM_staging database op de server WVFIMP01).

In de tabel dbo.studenten zijn uiteraard de volgende velden aanwezig:

ObjectId, lokatie, klas, cohort, crebo, opleidingsnaam, geboortedatum, (en nog vele andere).

Deze worden elk uur bij ons up-to-date gehouden vanuit de deelnemers administratie.


De attributen worden dan als volgt opgebouwd

  • Open de ‘relying Party Trust’ en selecteer de trust waarvoor je de attributen wilt aanpassen.
  • Kies voor ‘Edit Claim Rules’ en selecteer ‘Send Claims Using a Custom Rule’


nlEduPersonDepartment

In het venster voor de ‘Custom rule’ wordt het volgende ingevuld:

c:[Type == "DC_SamId"]
  => issue(store = "ILM_staging",
    types = ("nlEduPersonDepartment"),
    query = "SELECT lokatie as nlEduPersonDepartment
            from dbo.studenten  where ObjectID = {0}",
    param = C.Value);


PS1: De regels moeten als een regel (‘oneliner’) zonder regeleinde ingevoerd worden in het veld Custom rule.

PS2: as <attributename> kan weggelaten worden in de query's. Door de types = (“<attribute>”), wordt bepaald aan welk attribuut de gevonden waarde(n) gekoppeld moet worden.

Adfs-sql-02.png

Bij het op [ OK ] klikken wordt op de achtergrond de syntax gecontroleerd.

Direct hierna kan via de Referentie Service Provider (in dit geval staging) gecontroleerd worden of het correct is.

De URL hiervoor is: https://referentie-s.entree.kennisnet.nl/referentiesp

Als het goed gaat komt het standaard overzicht waarbij het attribuut netjes aanwezig is.

Adfs-sql-03.png

Als de query niets oplevert, wordt het attribuut ook niet getoond in het overzicht.

Als er iets fout gaat, bijvoorbeeld er wordt een date of numeriek gegeven teruggestuurd, komt er een foutmelding 'Authenticatie Mislukt' met o.a. gebruikersnaam of wachtwoord verkeerd. (Kennisnet gaat er bij de meeste attributen vanuit dat het een string is)

Adfs-sql-04.jpg


Het is mij nog niet gelukt een logfile te vinden of in te stellen waarbij ik iets meer kan terugvinden. Het blijft dan ook gissen naar de oorzaak.

Als de syntax van de claim rule verkeerd is komt daar wel een foutmelding van, bij het opslaan van de claim rule.

Adfs-sql-05.png

Hierbij is de “ vergeten in …ObjectID = {0}", .


nlEduPersonUnit

c:[Type == "DC_SamId"]
  => issue(store = "ILM_staging",
     types = ("nlEduPersonUnit"),
     query = "SELECT klas as nlEduPersonUnit from dbo.studenten
             where ObjectID = {0}",
     param = C.Value);


nlEduPersonCohort

c:[Type == "DC_SamId"]
  => issue(store = "ILM_staging", 
     types = ("nlEduPersonCohort"),
     query = "SELECT COALESCE('20'+ COHORT,'2014') as nlEduPersonCohort from dbo.studenten
             where ObjectID = {0}", 
     param = C.Value);


nlEduPersonProfile

c:[Type == "DC_SamId"]
  => issue(store = "ILM_staging",
     types = ("nlEduPersonProfile"),
     query = "SELECT crebo + ' ' + Opleiding_naam as nlEduPersonProfile from dbo.studenten  
             where ObjectID = {0}",
     param = C.Value);


nlEduPersonBirthDate

c:[Type == "DC_SamId"]
  => issue(store = "ILM_staging",
     types = ("nlEduPersonBirthDate"),
     query = "SELECT geboortedatum as nlEduPersonBirthDate from dbo.studenten
             where ObjectID = {0}", 
     param = C.Value);

Geboortedatum

Kennisnet wil ‘JJJJMMDD’ ontvangen (Zie Overzicht van Federatieve attributen voor Identity Providers).

Geboortedatum is namelijk een string geworden in onze databaseview met opmaak ‘DD-MM-JJJJ’.

Dus de select moet worden: "SELECT CONVERT(NVARCHAR(10), cast(geboortedatum as date), 112)…


Auteur: Bert Barskè| Drenthe College