KNF:Scoping: verschil tussen versies
(45 tussenliggende versies door 3 gebruikers niet weergegeven) | |||
Regel 1: | Regel 1: | ||
+ | Scoping maakt het mogelijk dat een Service Provider één of meerdere Identity Providers opgeeft in een authnRequest. Hiermee kan je als Service Provider bepalen welke Identity Providers ondersteund worden. |
||
− | Met een SAML koppeling is dit mogelijk met de functie scoping. |
||
+ | |||
− | Meer informatie daarover kan je op deze website vinden: |
||
+ | Indien één Identity Provider wordt opgegeven, wordt het WAYF scherm van Entree Federatie overgeslagen. Deze functie is vooral handig indien je voor scholen een aparte omgeving / subdomein hebt. |
||
− | https://simplesamlphp.org/docs/1.6/simplesamlphp-scoping |
||
+ | |||
+ | |||
+ | ==Authenticatie verzoek met scoping== |
||
+ | Authenticatie verzoek met scoping van de Service Provider naar Entree Federatie. |
||
+ | Het authenticatie verzoek komt in dit geval van ''<nowiki>https://bestelshop</nowiki>''. |
||
+ | De scoping wordt gedaan op ''<nowiki>https://mijn-idp</nowiki>''. |
||
+ | |||
+ | <syntaxhighlight lang="xml"> |
||
+ | <AuthnRequest Version="2.0" |
||
+ | IssueInstant="2019-12-06T10:00:02Z" |
||
+ | Destination="https://aselect.entree.kennisnet.nl/openaselect/profiles/saml2/sso/web" |
||
+ | AssertionConsumerServiceURL="https://bestelshop/saml2-acs.php" |
||
+ | ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"> |
||
+ | <Issuer>https://bestelshop</Issuer> |
||
+ | <NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" AllowCreate="true"/> |
||
+ | <Scoping> |
||
+ | <IDPList> |
||
+ | <IDPEntry ProviderID="https://mijn-idp" /> |
||
+ | </IDPList> |
||
+ | </Scoping> |
||
+ | </AuthnRequest> |
||
+ | |||
+ | </syntaxhighlight> |
||
+ | |||
+ | ==OIDC Authenticatie verzoek met login_hint== |
||
+ | OIDC Authenticatie verzoek met login_hint van de Service Provider naar Entree Federatie. |
||
+ | |||
+ | Met de parameter login_hint kan met een OIDC koppeling het WAYF scherm worden overgeslagen. |
||
+ | |||
+ | &login_hint=https://mijn-idp |
||
+ | |||
+ | <syntaxhighlight lang="xml"> |
||
+ | |||
+ | https://oidcng.entree-s.kennisnet.nl/oidc/authorize?client_id=bestelshop.nl&redirect_uri=https%3A%2F%2Fbestelshop.nl&response_type=code&grant_types=%5B%22implicit%22%5D&scopes=%5B%22openid%22,%22profile%22,%22email%22%5D&login_hint=https%3A%2F%2Fmijn-idp |
||
+ | |||
+ | </syntaxhighlight> |
||
+ | |||
+ | ==Realm scoping== |
||
+ | Kennisnet heeft in juli 2020 in samenwerking met een aantal ketenpartijen realm scoping geïntroduceerd. Met realm scoping kan een Service Provider in plaats van het entityID van een Identity Provider, een realm meegeven in het authnRequest. Door de realm mee te geven wordt niet alleen het WAYF scherm van Entree Federatie overgeslagen, maar ook het WAYF scherm van Identity Providers zoals Magister, SOMtoday, Itslearning, etc. |
||
+ | |||
+ | <!-- De volledige werking van scoping staat uitgelegd in dit document, t.b.v. de keten start schooljaar: [[Media:realm-scoping.pdf]] --> |
||
+ | |||
+ | ==Aangesloten scholen - data van de WAYF in JSON bestand== |
||
+ | Op Entree Federatie Aangesloten scholen staan in de WAYF tijdens het inloggen. |
||
+ | |||
+ | De live data van de WAYF is via een publiek JSON bestand beschikbaar via: |
||
+ | * https://engine.entree.kennisnet.nl/sso/wayfsearch |
||
+ | |||
+ | De lijst kan ook specifiek voor een Service Provider (of Relying Party) worden opgevraagd door het entityID (URL encoded) toe te voegen: |
||
+ | * https://engine.entree.kennisnet.nl/sso/wayfsearch?sp-entity-id=www.kwaliteitscholen.app |
||
+ | |||
+ | Voorbeeld: |
||
+ | <syntaxhighlight lang="json"> |
||
+ | { |
||
+ | "idp": { |
||
+ | "friendly_name": "Magister", |
||
+ | "entity_id": "https://saml.magister.net" |
||
+ | }, |
||
+ | "institution": { |
||
+ | "friendly_name": "Almende College", |
||
+ | "location": "Silvolde", |
||
+ | "brin": "14UM02" |
||
+ | }, |
||
+ | "realm": "magis.almende14UM02" |
||
+ | } |
||
+ | </syntaxhighlight> |
||
+ | |||
+ | |||
+ | ==Scoping met SimpleSAMLphp== |
||
+ | Meer informatie over het gebruik van scoping in SimpleSAMLphp staat op de website: |
||
+ | |||
+ | https://simplesamlphp.org/docs/stable/simplesamlphp-scoping |
||
+ | |||
+ | ==Scoping met componentspace== |
||
+ | Toevoegen van scoping aan componentspace AuthnRequest() |
||
+ | |||
+ | <syntaxhighlight lang="java"> |
||
+ | |||
+ | //Create the AuthnRequest// |
||
+ | Private Function CreateAuthnRequest(certificate As X509Certificate2, ssoURL As String, UseScoping as Boolean, Brin as String) As XmlElement |
||
+ | |||
+ | // Define EntityID// |
||
+ | Dim entityId As String = ConfigurationManager.AppSettings("Entree.EntityID") |
||
+ | Dim authnRequest As New AuthnRequest() |
||
+ | authnRequest.Destination = ssoURL |
||
+ | authnRequest.Issuer = New Issuer(entityId) |
||
+ | authnRequest.ForceAuthn = False |
||
+ | authnRequest.NameIDPolicy = New NameIDPolicy(Nothing, Nothing, True) |
||
+ | |||
+ | //Gebruik scoping om school selectie scherm over te slaan?// |
||
+ | If UseScoping = True Then |
||
+ | |||
+ | //download json van kennisnet waar de ProviderIDs in zitten// |
||
+ | Dim wc As New WebClient() |
||
+ | Dim json As String = wc.DownloadString(“https://engine.entree.kennisnet.nl/sso/wayfsearch?sp-entity-id=” & entityId) |
||
+ | Dim wayfsearch As JArray = JArray.Parse(json) |
||
+ | Dim ProviderID As String = "" |
||
+ | For Each w In wayfsearch.Children |
||
+ | //zoek voor het juiste providerID bij de opgegeven BRIN// |
||
+ | If w("institution")("brin").ToString().ToLower() = Brin.ToLower() Then |
||
+ | ProviderID = w("idp")("entity_id").ToString() |
||
+ | End If |
||
+ | Next |
||
+ | |||
+ | If String.IsNullOrEmpty(ProviderID) = False Then 'ProviderID gevonden |
||
+ | Dim ips As IDPList = New IDPList() |
||
+ | Dim ipe As IDPEntry = New IDPEntry() |
||
+ | ipe.ProviderID = ProviderID |
||
+ | ips.IDPEntries.Add(ipe) |
||
+ | Dim scopeing As Scoping = New Scoping() |
||
+ | scopeing.IDPList = ips |
||
+ | scopeing.ProxyCount = 2 |
||
+ | authnRequest.Scoping = scopeing |
||
+ | End If |
||
+ | End If |
||
+ | authnRequest.ProtocolBinding = SAMLIdentifiers.BindingURIs.HTTPPost |
||
+ | authnRequest.AssertionConsumerServiceURL = ConfigurationManager.AppSettings("AssertionConsumerServiceURL") |
||
+ | |||
+ | Dim authnRequestXml As XmlElement = authnRequest.ToXml() |
||
+ | ' Add signature |
||
+ | SAMLMessageSignature.Generate(authnRequestXml, certificate.PrivateKey, certificate) |
||
+ | Return authnRequestXml |
||
+ | End Function |
||
+ | </syntaxhighlight> |
||
+ | |||
+ | |||
+ | [[Categorie:Entree Federatie]] |
Huidige versie van 4 apr 2024 om 13:16
Scoping maakt het mogelijk dat een Service Provider één of meerdere Identity Providers opgeeft in een authnRequest. Hiermee kan je als Service Provider bepalen welke Identity Providers ondersteund worden.
Indien één Identity Provider wordt opgegeven, wordt het WAYF scherm van Entree Federatie overgeslagen. Deze functie is vooral handig indien je voor scholen een aparte omgeving / subdomein hebt.
Authenticatie verzoek met scoping
Authenticatie verzoek met scoping van de Service Provider naar Entree Federatie. Het authenticatie verzoek komt in dit geval van https://bestelshop. De scoping wordt gedaan op https://mijn-idp.
<AuthnRequest Version="2.0"
IssueInstant="2019-12-06T10:00:02Z"
Destination="https://aselect.entree.kennisnet.nl/openaselect/profiles/saml2/sso/web"
AssertionConsumerServiceURL="https://bestelshop/saml2-acs.php"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST">
<Issuer>https://bestelshop</Issuer>
<NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" AllowCreate="true"/>
<Scoping>
<IDPList>
<IDPEntry ProviderID="https://mijn-idp" />
</IDPList>
</Scoping>
</AuthnRequest>
OIDC Authenticatie verzoek met login_hint
OIDC Authenticatie verzoek met login_hint van de Service Provider naar Entree Federatie.
Met de parameter login_hint kan met een OIDC koppeling het WAYF scherm worden overgeslagen.
&login_hint=https://mijn-idp
https://oidcng.entree-s.kennisnet.nl/oidc/authorize?client_id=bestelshop.nl&redirect_uri=https%3A%2F%2Fbestelshop.nl&response_type=code&grant_types=%5B%22implicit%22%5D&scopes=%5B%22openid%22,%22profile%22,%22email%22%5D&login_hint=https%3A%2F%2Fmijn-idp
Realm scoping
Kennisnet heeft in juli 2020 in samenwerking met een aantal ketenpartijen realm scoping geïntroduceerd. Met realm scoping kan een Service Provider in plaats van het entityID van een Identity Provider, een realm meegeven in het authnRequest. Door de realm mee te geven wordt niet alleen het WAYF scherm van Entree Federatie overgeslagen, maar ook het WAYF scherm van Identity Providers zoals Magister, SOMtoday, Itslearning, etc.
Aangesloten scholen - data van de WAYF in JSON bestand
Op Entree Federatie Aangesloten scholen staan in de WAYF tijdens het inloggen.
De live data van de WAYF is via een publiek JSON bestand beschikbaar via:
De lijst kan ook specifiek voor een Service Provider (of Relying Party) worden opgevraagd door het entityID (URL encoded) toe te voegen:
Voorbeeld:
{
"idp": {
"friendly_name": "Magister",
"entity_id": "https://saml.magister.net"
},
"institution": {
"friendly_name": "Almende College",
"location": "Silvolde",
"brin": "14UM02"
},
"realm": "magis.almende14UM02"
}
Scoping met SimpleSAMLphp
Meer informatie over het gebruik van scoping in SimpleSAMLphp staat op de website:
https://simplesamlphp.org/docs/stable/simplesamlphp-scoping
Scoping met componentspace
Toevoegen van scoping aan componentspace AuthnRequest()
//Create the AuthnRequest//
Private Function CreateAuthnRequest(certificate As X509Certificate2, ssoURL As String, UseScoping as Boolean, Brin as String) As XmlElement
// Define EntityID//
Dim entityId As String = ConfigurationManager.AppSettings("Entree.EntityID")
Dim authnRequest As New AuthnRequest()
authnRequest.Destination = ssoURL
authnRequest.Issuer = New Issuer(entityId)
authnRequest.ForceAuthn = False
authnRequest.NameIDPolicy = New NameIDPolicy(Nothing, Nothing, True)
//Gebruik scoping om school selectie scherm over te slaan?//
If UseScoping = True Then
//download json van kennisnet waar de ProviderIDs in zitten//
Dim wc As New WebClient()
Dim json As String = wc.DownloadString(“https://engine.entree.kennisnet.nl/sso/wayfsearch?sp-entity-id=” & entityId)
Dim wayfsearch As JArray = JArray.Parse(json)
Dim ProviderID As String = ""
For Each w In wayfsearch.Children
//zoek voor het juiste providerID bij de opgegeven BRIN//
If w("institution")("brin").ToString().ToLower() = Brin.ToLower() Then
ProviderID = w("idp")("entity_id").ToString()
End If
Next
If String.IsNullOrEmpty(ProviderID) = False Then 'ProviderID gevonden
Dim ips As IDPList = New IDPList()
Dim ipe As IDPEntry = New IDPEntry()
ipe.ProviderID = ProviderID
ips.IDPEntries.Add(ipe)
Dim scopeing As Scoping = New Scoping()
scopeing.IDPList = ips
scopeing.ProxyCount = 2
authnRequest.Scoping = scopeing
End If
End If
authnRequest.ProtocolBinding = SAMLIdentifiers.BindingURIs.HTTPPost
authnRequest.AssertionConsumerServiceURL = ConfigurationManager.AppSettings("AssertionConsumerServiceURL")
Dim authnRequestXml As XmlElement = authnRequest.ToXml()
' Add signature
SAMLMessageSignature.Generate(authnRequestXml, certificate.PrivateKey, certificate)
Return authnRequestXml
End Function