<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://k5wiki.kerberos.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hbhotz</id>
		<title>K5Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://k5wiki.kerberos.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hbhotz"/>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki/Special:Contributions/Hbhotz"/>
		<updated>2026-04-22T15:52:41Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>https://k5wiki.kerberos.org/wiki?title=Projects/SAMLInKerberos&amp;diff=2853</id>
		<title>Projects/SAMLInKerberos</title>
		<link rel="alternate" type="text/html" href="https://k5wiki.kerberos.org/wiki?title=Projects/SAMLInKerberos&amp;diff=2853"/>
				<updated>2009-10-28T00:16:54Z</updated>
		
		<summary type="html">&lt;p&gt;Hbhotz: /* KRB5_AUTHDATA_SAML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project-early}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category: early stage projects]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
Extend Kerberos to permit the inclusion of a SAML assertion in KDC-issued authorization data.&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
===KRB5_AUTHDATA_SAML===&lt;br /&gt;
&lt;br /&gt;
A new authorisation data type, KRB5_AUTHDATA_SAML, is defined. This carries a SAML assertion. When issued or vouched for by the KDC, the assertion is bound to a ticket by signing with the TGT session key. This behaviour is similar to AD-KDCIssued, except that XML signatures are used.&lt;br /&gt;
&lt;br /&gt;
Additionally, for assertions issued by the KDC:&lt;br /&gt;
&lt;br /&gt;
* an AuthnStatement is present containing the authtime as AuthnInstant and the Kerberos AuthnContextClassRef&lt;br /&gt;
* the Subject contains the client principal name&lt;br /&gt;
* the Issuer contains the TGS name&lt;br /&gt;
&lt;br /&gt;
TBD: is there any point in validating the Issuer and AuthnStatement given only the TGS could have signed the assertion with that session key?&lt;br /&gt;
&lt;br /&gt;
[HBH comment]: I don't think so.&lt;br /&gt;
&lt;br /&gt;
I'm also concerned about interoperability issues.  E.g. if there is also a PAC then shouldn't we guarantee a 1-to-1 correspondence between SAML assertions and group memberships?  This concern extends to any other authorization data types as well.&lt;br /&gt;
&lt;br /&gt;
===KDC as IdP===&lt;br /&gt;
&lt;br /&gt;
A new KDC-side authorisation data plugin assembles a SAML assertion from a user's attributes in the directory and signs it. Presently, all attributes not used by the Kerberos LDAP backend itself are propagated into the attribute statement: whilst the use of directory server-side ACLs affords some flexibility, this will be most useful when attributes can be mapped and filtered on a per-deployment and per-service basis.&lt;br /&gt;
&lt;br /&gt;
===SAML GSS Naming Extensions===&lt;br /&gt;
&lt;br /&gt;
A new GSS naming extensions plugin verifies the above authorisation data and parses it. The attribute statement is then surfaced through GSS naming extensions.&lt;br /&gt;
&lt;br /&gt;
===Transitive trust===&lt;br /&gt;
&lt;br /&gt;
It would be useful for services to validate assertions that are not issued by the KDC. I propose two, presently unimplemented, mechanisms:&lt;br /&gt;
&lt;br /&gt;
* the GSS naming extensions plugin supports the verification of public key signatures and some out-of-band mechanism for binding principal names&lt;br /&gt;
* the KDC can vouch for assertions issued by a third-party IdP&lt;br /&gt;
&lt;br /&gt;
The assertion may be submitted in the TGS-REQ. The KDC will copy the assertion into the resulting ticket, optionally adding its own signature if it can vouch for it.&lt;br /&gt;
&lt;br /&gt;
===SAML-based S4U2Self===&lt;br /&gt;
&lt;br /&gt;
A variant of S4U2Self that supports identifying users with SAML assertions is proposed. One way would be to leverage the existing S4U2Self protocol exchange, redefining the semantics such that:&lt;br /&gt;
&lt;br /&gt;
* a well known principal name is used as the S4U2Self client principal&lt;br /&gt;
* the assertion is submitted in the KDC-REQ authorisation data&lt;br /&gt;
&lt;br /&gt;
This is an abuse of the authorisation data field: a better approach would be to use FAST but I may use the above for prototyping to avoid extensive changes to the KDC and client library whilst prototyping.&lt;br /&gt;
&lt;br /&gt;
===Name encoding===&lt;br /&gt;
&lt;br /&gt;
When using a SAML assertion to identify a user where the requestor does not know of the Kerberos principal name mapping, it should use the following names. This would be the case during S4U2Self or possibly PKU2U.&lt;br /&gt;
&lt;br /&gt;
====Principal names====&lt;br /&gt;
&lt;br /&gt;
From draft-zhu-pku2u we import the NULL principal name.&lt;br /&gt;
&lt;br /&gt;
* The type is KRB_NT_WELLKNOWN&lt;br /&gt;
* The name-string field consists of &amp;quot;WELLKNOWN&amp;quot;, &amp;quot;NULL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Realm names====&lt;br /&gt;
&lt;br /&gt;
From draft-ietf-krb-wg-naming we import the wellknown realm type.&lt;br /&gt;
&lt;br /&gt;
* The realm name is WELLKNOWN:SAML&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
Preliminary code is in the users/lhoward/saml branch, which itself is a branch of the constrained delegation (users/lhoward/s4u2proxy) branch. Most of the code is to be found in src/plugins/authdata/saml_{client,server}.&lt;br /&gt;
&lt;br /&gt;
OpenSAML is assumed to be installed in /usr/local.&lt;br /&gt;
&lt;br /&gt;
==Open issues==&lt;br /&gt;
&lt;br /&gt;
==Status==&lt;br /&gt;
&lt;br /&gt;
Current status is partial prototype only.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
&lt;br /&gt;
The following test shows a service principal acquiring a ticket for bjensen@MIT.DE.PADL.COM and displaying the returned attribute statement via naming extensions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Protocol transition tests follow&lt;br /&gt;
-----------------------------------&lt;br /&gt;
&lt;br /&gt;
Reading symbols for shared libraries . done&lt;br /&gt;
Reading symbols for shared libraries ..... done&lt;br /&gt;
Target name:	host/somehost.mit.de.padl.com@MIT.DE.PADL.COM&lt;br /&gt;
Target mech:	{ 1 2 840 113554 1 2 2 }&lt;br /&gt;
Source name:	bjensen@MIT.DE.PADL.COM&lt;br /&gt;
Source mech:	{ 1 2 840 113554 1 2 2 }&lt;br /&gt;
Attribute: urn:oid:0.9.2342.19200300.100.1.3 Authenticated Complete&lt;br /&gt;
Value: bjensen@padl.com&lt;br /&gt;
&lt;br /&gt;
Attribute: urn:oid:2.5.4.4 Authenticated Complete&lt;br /&gt;
Value: Jensen&lt;br /&gt;
&lt;br /&gt;
Attribute: urn:oid:2.5.4.42 Authenticated Complete&lt;br /&gt;
Value: Babs&lt;br /&gt;
&lt;br /&gt;
Attribute: urn:oid:2.5.4.3 Authenticated Complete&lt;br /&gt;
Value: Babs Jensen&lt;br /&gt;
&lt;br /&gt;
Attribute: urn:oid:2.5.4.20 Authenticated Complete&lt;br /&gt;
Value: +1 212 555 1234&lt;br /&gt;
&lt;br /&gt;
Attribute: urn:oid:2.5.4.43 Authenticated Complete&lt;br /&gt;
Value: BJ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Data===&lt;br /&gt;
&lt;br /&gt;
An example SAML assertion follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;saml:Assertion&lt;br /&gt;
  xmlns:saml='urn:oasis:names:tc:SAML:2.0:assertion'&lt;br /&gt;
  xmlns:xs='http://www.w3.org/2001/XMLSchema'&lt;br /&gt;
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'&lt;br /&gt;
  xmlns:x500='urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500'&lt;br /&gt;
  xmlns:ds='http://www.w3.org/2000/09/xmldsig#'&lt;br /&gt;
  ID='_3e53282d753b22b3b1273a0895dfd37c'&lt;br /&gt;
  Version='2.0'&lt;br /&gt;
  IssueInstant='2009-10-26T22:23:27Z'&lt;br /&gt;
&amp;gt;&lt;br /&gt;
  &amp;lt;saml:Issuer&lt;br /&gt;
    Format='urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos'&lt;br /&gt;
  &amp;gt;krbtgt/MIT.DE.PADL.COM@MIT.DE.PADL.COM&amp;lt;/saml:Issuer&amp;gt;&lt;br /&gt;
  &amp;lt;saml:Subject&amp;gt;&lt;br /&gt;
    &amp;lt;saml:NameID&lt;br /&gt;
      Format='urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos'&lt;br /&gt;
    &amp;gt;bjensen@MIT.DE.PADL.COM&amp;lt;/saml:NameID&amp;gt;&lt;br /&gt;
  &amp;lt;/saml:Subject&amp;gt;&lt;br /&gt;
  &amp;lt;saml:Conditions&lt;br /&gt;
    NotBefore='2009-10-26T22:23:27Z'&lt;br /&gt;
    NotOnOrAfter='2009-10-27T22:23:27Z'&lt;br /&gt;
  &amp;gt;&amp;lt;/saml:Conditions&amp;gt;&lt;br /&gt;
  &amp;lt;saml:AuthnStatement&lt;br /&gt;
    AuthnInstant='2009-10-26T22:23:27Z'&lt;br /&gt;
  &amp;gt;&lt;br /&gt;
    &amp;lt;saml:AuthnContext&amp;gt;&lt;br /&gt;
      &amp;lt;saml:AuthnContextClassRef&amp;gt;urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos&amp;lt;/saml:AuthnContextClassRef&amp;gt;&lt;br /&gt;
    &amp;lt;/saml:AuthnContext&amp;gt;&lt;br /&gt;
  &amp;lt;/saml:AuthnStatement&amp;gt;&lt;br /&gt;
  &amp;lt;saml:AttributeStatement&amp;gt;&lt;br /&gt;
    &amp;lt;saml:Attribute&lt;br /&gt;
      NameFormat='urn:oasis:names:tc:SAML:2.0:attrname-format:uri'&lt;br /&gt;
      FriendlyName='mail'&lt;br /&gt;
      Name='urn:oid:0.9.2342.19200300.100.1.3'&lt;br /&gt;
      x500:Encoding='LDAP'&lt;br /&gt;
    &amp;gt;&lt;br /&gt;
      &amp;lt;saml:AttributeValue&amp;gt;bjensen@padl.com&amp;lt;/saml:AttributeValue&amp;gt;&lt;br /&gt;
    &amp;lt;/saml:Attribute&amp;gt;&lt;br /&gt;
    &amp;lt;saml:Attribute&lt;br /&gt;
      NameFormat='urn:oasis:names:tc:SAML:2.0:attrname-format:uri'&lt;br /&gt;
      FriendlyName='sn'&lt;br /&gt;
      Name='urn:oid:2.5.4.4'&lt;br /&gt;
      x500:Encoding='LDAP'&lt;br /&gt;
    &amp;gt;&lt;br /&gt;
      &amp;lt;saml:AttributeValue&amp;gt;Jensen&amp;lt;/saml:AttributeValue&amp;gt;&lt;br /&gt;
    &amp;lt;/saml:Attribute&amp;gt;&lt;br /&gt;
    &amp;lt;saml:Attribute&lt;br /&gt;
      NameFormat='urn:oasis:names:tc:SAML:2.0:attrname-format:uri'&lt;br /&gt;
      FriendlyName='givenName'&lt;br /&gt;
      Name='urn:oid:2.5.4.42'&lt;br /&gt;
      x500:Encoding='LDAP'&lt;br /&gt;
    &amp;gt;&lt;br /&gt;
      &amp;lt;saml:AttributeValue&amp;gt;Babs&amp;lt;/saml:AttributeValue&amp;gt;&lt;br /&gt;
    &amp;lt;/saml:Attribute&amp;gt;&lt;br /&gt;
    &amp;lt;saml:Attribute&lt;br /&gt;
      NameFormat='urn:oasis:names:tc:SAML:2.0:attrname-format:uri'&lt;br /&gt;
      FriendlyName='cn'&lt;br /&gt;
      Name='urn:oid:2.5.4.3'&lt;br /&gt;
      x500:Encoding='LDAP'&lt;br /&gt;
    &amp;gt;&lt;br /&gt;
      &amp;lt;saml:AttributeValue&amp;gt;Babs Jensen&amp;lt;/saml:AttributeValue&amp;gt;&lt;br /&gt;
    &amp;lt;/saml:Attribute&amp;gt;&lt;br /&gt;
    &amp;lt;saml:Attribute&lt;br /&gt;
      NameFormat='urn:oasis:names:tc:SAML:2.0:attrname-format:uri'&lt;br /&gt;
      FriendlyName='telephoneNumber'&lt;br /&gt;
      Name='urn:oid:2.5.4.20'&lt;br /&gt;
      x500:Encoding='LDAP'&lt;br /&gt;
    &amp;gt;&lt;br /&gt;
      &amp;lt;saml:AttributeValue&amp;gt;+1 212 555 1234&amp;lt;/saml:AttributeValue&amp;gt;&lt;br /&gt;
    &amp;lt;/saml:Attribute&amp;gt;&lt;br /&gt;
    &amp;lt;saml:Attribute&lt;br /&gt;
      NameFormat='urn:oasis:names:tc:SAML:2.0:attrname-format:uri'&lt;br /&gt;
      FriendlyName='initials'&lt;br /&gt;
      Name='urn:oid:2.5.4.43'&lt;br /&gt;
      x500:Encoding='LDAP'&lt;br /&gt;
    &amp;gt;&lt;br /&gt;
      &amp;lt;saml:AttributeValue&amp;gt;BJ&amp;lt;/saml:AttributeValue&amp;gt;&lt;br /&gt;
    &amp;lt;/saml:Attribute&amp;gt;&lt;br /&gt;
  &amp;lt;/saml:AttributeStatement&amp;gt;&lt;br /&gt;
&amp;lt;/saml:Assertion&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hbhotz</name></author>	</entry>

	</feed>