Skip to content

TIDO-508 Add extracted test SAML Attributes to proxy #4

Merged
merged 8 commits into from
Sep 23, 2024
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,22 @@ Now, there are two ways to do testing:
`user1pass` for the password.
4. After logging in, you should see a PHP information page. Under the
"Headers" heading, yous should see the following, letting you know you successsfully authenticated using the proxy:
"Headers" heading, you should see the following information, letting you know you successsfully authenticated using the proxy:
| Header | Value |
|--------------------|--------------------------------|
| Referer | "http://idp.example.edu:8080/" |
| X-Forwarded-Host | "sptest.example.edu" |
| Referer | "http://idp.example.edu:8080/" |
| X-Forwarded-Host | "sptest.example.edu" |
5. When finished, shut down the services from `docker compose.yml`:
5. You should also see on the PHP information page the following Headers and Values, letting you know you successsfully extracted the specified attributes from the SAML assertion in the response:
| Header | Value |
|--------------------------|------------------------|
| X-Forwarded-DisplayName | "User One" |
| X-Forwarded-Email | "user1@example.edu" |
| X-Forwarded-User | "user1@example.edu" |
6. When finished, shut down the services from `docker compose.yml`:
```
docker compose down
```
Expand Down
6 changes: 4 additions & 2 deletions container_files/httpd/proxy.conf
dmartinez marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ PassEnv FRONT_HTTPS_PORT
# Configure behavior for all proxied requests
<Proxy "*">
# Prevent these headers from being set by the client
RequestHeader unset X-Forwarded-Groups
RequestHeader unset X-Forwarded-DisplayName
RequestHeader unset X-Forwarded-Email
RequestHeader unset X-Forwarded-User

# Provide headers to help the back-end application construct URLs correctly
Expand All @@ -15,6 +16,7 @@ PassEnv FRONT_HTTPS_PORT

# Set auth headers if corresponding environment variables have been set
# by the Shibboleth SP
RequestHeader set "X-Forwarded-Groups" "%{isMemberOf}e" env=isMemberOf
RequestHeader set "X-Forwarded-DisplayName" "%{displayName}e" env=displayName
RequestHeader set "X-Forwarded-Email" "%{mail}e" env=mail
RequestHeader set "X-Forwarded-User" "%{eppn}e" env=eppn
</Proxy>
7 changes: 5 additions & 2 deletions container_files/shibboleth/attribute-map.xml
dmartinez marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
few exceptions for newer attributes where the name is the same for both versions. You will
usually want to uncomment or map the names for both SAML versions as a unit.
-->

<!-- New standard identifier attributes for SAML. -->

<Attribute name="urn:oasis:names:tc:SAML:attribute:subject-id" id="subject-id">
<AttributeDecoder xsi:type="ScopedAttributeDecoder" caseSensitive="false"/>
</Attribute>

<Attribute name="urn:oasis:names:tc:SAML:attribute:pairwise-id" id="pairwise-id">
<AttributeDecoder xsi:type="ScopedAttributeDecoder" caseSensitive="false"/>
</Attribute>
Expand All @@ -22,17 +22,20 @@
<Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" id="eppn">
<AttributeDecoder xsi:type="ScopedAttributeDecoder" caseSensitive="false"/>
</Attribute>

<Attribute name="urn:mace:dir:attribute-def:eduPersonPrincipalName" id="eppn">
<AttributeDecoder xsi:type="ScopedAttributeDecoder" caseSensitive="false"/>
</Attribute>

<Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.9" id="affiliation">
<AttributeDecoder xsi:type="ScopedAttributeDecoder" caseSensitive="false"/>
</Attribute>

<Attribute name="urn:mace:dir:attribute-def:eduPersonScopedAffiliation" id="affiliation">
<AttributeDecoder xsi:type="ScopedAttributeDecoder" caseSensitive="false"/>
</Attribute>


<Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.7" id="entitlement"/>
<Attribute name="urn:mace:dir:attribute-def:eduPersonEntitlement" id="entitlement"/>

Expand Down
4 changes: 4 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ services:
test: ["CMD", "curl", "-f", "--insecure", "http://localhost:8080/simplesaml/module.php/core/frontpage_welcome.php"]
volumes:
- "./tests/containers/idp/users.php:/var/www/simplesamlphp/config/authsources.php"
- "./tests/containers/idp/saml20-sp-remote.php:/var/www/simplesamlphp/metadata/saml20-sp-remote.php"

proxy:
build:
Expand Down Expand Up @@ -123,6 +124,9 @@ services:
SAML_IDP_METADATA: |
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="http://idp.example.edu:8080/simplesaml/saml2/idp/metadata.php">
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:Extensions>
<shibmd:Scope xmlns:shibmd="urn:mace:shibboleth:metadata:1.0" regexp="false">example.edu</shibmd:Scope>
</md:Extensions>
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
Expand Down
12 changes: 12 additions & 0 deletions tests/containers/idp/saml20-sp-remote.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php
/**
* SAML 2.0 remote SP metadata for SimpleSAMLphp.
*
* See: https://simplesamlphp.org/docs/stable/simplesamlphp-reference-sp-remote
*/

$metadata[getenv('SIMPLESAMLPHP_SP_ENTITY_ID')] = array(
'AssertionConsumerService' => getenv('SIMPLESAMLPHP_SP_ASSERTION_CONSUMER_SERVICE'),
'SingleLogoutService' => getenv('SIMPLESAMLPHP_SP_SINGLE_LOGOUT_SERVICE'),
'attributes.NameFormat' => 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
);
47 changes: 4 additions & 43 deletions tests/containers/idp/users.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,54 +11,15 @@
'uid' => array('1'),
'first_name' => 'User',
'last_name' => 'One',
'email' => 'user_1@example.com',
'urn:oid:0.9.2342.19200300.100.1.3' => 'user_1@example.edu',
'urn:oid:1.3.6.1.4.1.5923.1.1.1.6' => 'user_1@example.edu',
'urn:oid:2.16.840.1.113730.3.1.241' => 'User One',
),
'user2:user2pass' => array(
'uid' => array('2'),
'first_name' => 'User',
'last_name' => 'Two',
'email' => 'user_2@example.com',
),
'user3:user3pass' => array(
'uid' => array('3'),
'first_name' => 'User',
'last_name' => 'Three',
'email' => 'user_3@example.com',
),
'user4:user4pass' => array(
'uid' => array('4'),
'name' => 'User Four',
'email' => 'user_4@example.com',
),
'unauthorizeduser:unauthorizedpass' => [
'uid' => ['unauthorized.user@id.example.org'],
'name' => 'Unauthorized User',
'email' => 'unauthorized@example.org',
'groups' => [],
],
'authorizeduser:authorizedpass' => [
'uid' => ['authorized.user@id.example.org'],
'name' => 'Authorized User',
'email' => 'authorized@example.org',
'groups' => ['users'],
],
'externaluser:externalpass' => [
'uid' => ['external.user@id.example.org'],
'name' => 'External User',
'email' => 'external@example.org',
'mail' => 'external@example.org',
'groups' => ['external'],
],
'adminuser:adminpass' => [
'uid' => ['admin.user@id.example.org'],
'name' => 'Admin User',
'email' => 'adminuser@example.org',
'groups' => ['admins'],
],
'auditoruser:auditorpass' => [
'uid' => ['auditor.user@id.example.org'],
'name' => 'Auditor User',
'email' => 'auditor@example.org',
'groups' => ['auditors'],
],
),
);