X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Fproviders%2Fsaml2%2Fauth.py;h=7f92d770e0898b72f8c0dfaa00104207580e21c1;hp=9d796c5fb27d3e5d5b1179889ca7cd7c9e3595fa;hb=2959e20b5607edab7313aa5ba4500c1f37358979;hpb=3983bef596613acf4576957cfeea34dc7be421c4 diff --git a/ipsilon/providers/saml2/auth.py b/ipsilon/providers/saml2/auth.py index 9d796c5..7f92d77 100755 --- a/ipsilon/providers/saml2/auth.py +++ b/ipsilon/providers/saml2/auth.py @@ -55,12 +55,10 @@ class AuthenticateRequest(ProviderPageBase): self.STAGE_INIT = 0 self.STAGE_AUTH = 1 self.stage = self.STAGE_INIT - self.nameidfmt = None def auth(self, login): try: self.saml2checks(login) - self.saml2assertion(login) except AuthenticationError, e: self.saml2error(login, e.code, e.message) return self.reply(login) @@ -138,7 +136,7 @@ class AuthenticateRequest(ProviderPageBase): try: provider = ServiceProvider(self.cfg, login.remoteProviderId) - nameid = provider.get_valid_nameid(login.request.nameIdPolicy) + nameidfmt = provider.get_valid_nameid(login.request.nameIdPolicy) except NameIdNotAllowed, e: raise AuthenticationError( str(e), lasso.SAML2_STATUS_CODE_INVALID_NAME_ID_POLICY) @@ -146,20 +144,17 @@ class AuthenticateRequest(ProviderPageBase): raise AuthenticationError( str(e), lasso.SAML2_STATUS_CODE_AUTHN_FAILED) - self.nameidfmt = nameid - # TODO: check login.request.forceAuthn login.validateRequestMsg(not user.is_anonymous, consent) - def saml2assertion(self, login): - authtime = datetime.datetime.utcnow() skew = datetime.timedelta(0, 60) authtime_notbefore = authtime - skew authtime_notafter = authtime + skew - user = UserSession().get_user() + us = UserSession() + user = us.get_user() # TODO: get authentication type fnd name format from session # need to save which login manager authenticated and map it to a @@ -174,13 +169,21 @@ class AuthenticateRequest(ProviderPageBase): authtime_notafter.strftime(timeformat)) nameid = None - if self.nameidfmt == lasso.SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT: - nameid = user.name ## TODO map to something else ? - elif self.nameidfmt == lasso.SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT: - nameid = user.name ## TODO map to something else ? + if nameidfmt == lasso.SAML2_NAME_IDENTIFIER_FORMAT_PERSISTENT: + ## TODO map to something else ? + nameid = provider.normalize_username(user.name) + elif nameidfmt == lasso.SAML2_NAME_IDENTIFIER_FORMAT_TRANSIENT: + ## TODO map to something else ? + nameid = provider.normalize_username(user.name) + elif nameidfmt == lasso.SAML2_NAME_IDENTIFIER_FORMAT_KERBEROS: + nameid = us.get_data('user', 'krb_principal_name') + elif nameidfmt == lasso.SAML2_NAME_IDENTIFIER_FORMAT_EMAIL: + nameid = us.get_user().email + if not nameid: + nameid = '%s@%s' % (user.name, self.cfg.default_email_domain) if nameid: - login.assertion.subject.nameId.format = self.nameidfmt + login.assertion.subject.nameId.format = nameidfmt login.assertion.subject.nameId.content = nameid else: raise AuthenticationError("Unavailable Name ID type",