Skip to main content

OpenID Connect authentication provider for Sentry (Shibboleth)

Project description

OIDC Auth for Sentry (Shibboleth)

An SSO provider for Sentry which enables OpenID Connect Apps authentication for Shibboleth. This is a fork of siemens/sentry-auth-oidc, which was also forked from getsentry/sentry-auth-google.

Why fork, instead of adapting siemens/sentry-auth-oidc or getsentry/sentry-auth-google to work with every OIDC?

The maintainers have different ideas. See:

Install

pip install sentry-auth-oidc-shib

Setup steps for usage with Shibboleth

Shibboleth

  • Configure metadata/oidc-client.json
    {
        "scope": "openid profile email",
        "redirect_uris": [ 
            "https://sentry.example.com/auth/sso/" 
        ],
        "sector_identifier_uri": "https://sentry.example.com",
        "client_id": "<client-id>",
        "subject_type": "pairwise",
        "client_secret": "<client-secret>",
        "response_types": [ 
            "code"
        ],
        "grant_types": [ 
            "authorization_code"
        ]
    }
    
  • Configure conf/intercept/context-check-intercept-config.xml
    # Content of 
    <bean id="shibboleth.context-check.Condition" parent="shibboleth.Conditions.AND">
        <constructor-arg>
            <list>
                <bean class="net.shibboleth.idp.profile.logic.SimpleAttributePredicate" p:useUnfilteredAttributes="true">
                    <property name="attributeValueMap">
                        <map>
                            <entry key="oidcPermissions">
                                <list>
                                    <value>true</value>
                                </list>
                            </entry>
                        </map>
                    </property>
                </bean>
            </list>
        </constructor-arg>
    </bean>
    
  • Configure conf/attribute-resolver.xml
    <AttributeDefinition xsi:type="ScriptedAttribute" id="oidcPermissions" dependencyOnly="false">
        <InputDataConnector ref="myLDAP" attributeNames="eduPersonEntitlement"/>
        <Script><![CDATA[
            logger = Java.type("org.slf4j.LoggerFactory").getLogger("edu.internet2.middleware.shibboleth.resolver.Script.eduPersonPrincipalNameSource");
    
            // Get attribute to add
            peerEntityId = profileContext.getSubcontext("net.shibboleth.idp.profile.context.RelyingPartyContext").getRelyingPartyId();
    
            if (peerEntityId.equals("sentry.example.com") 
                    && eduPersonEntitlement.getValues().contains("urn:mace:example.com:permission:shibboleth:sentry-users")){ 
                logger.info("User can successfully login to " + peerEntityId);
                oidcPermissions.getValues().add("true");
            }	
        ]]>
        </Script>
    </AttributeDefinition>
    
  • Configure conf/relying-party.xml
    <bean parent="RelyingPartyByName" c:relyingPartyIds="sentry.example.com">
        <property name="profileConfigurations">
        <list>
            <bean parent="OIDC.SSO" p:postAuthenticationFlows="#{ {'context-check'} }"/>
            <ref bean="OIDC.UserInfo" />
        </list>
        </property>
    </bean>
    

Sentry

  • Configure sentry/sentry.conf.py
    OIDC_CLIENT_ID = "<client-id>"
    OIDC_CLIENT_SECRET = "<client-secret>"
    OIDC_SCOPE = "openid profile email"
    OIDC_DOMAIN = "https://shibboleth.example.com"
    
  • Configure sentry/enhance-image.sh
    pip install sentry-auth-oidc-shib
    

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sentry_auth_oidc_shib-2.0.0.tar.gz (8.8 kB view hashes)

Uploaded Source

Built Distribution

sentry_auth_oidc_shib-2.0.0-py3-none-any.whl (11.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page