RFC 7056
Name Attributes for the GSS-API Extensible Authentication Protocol (EAP) Mechanism
RFC 7056: Name Attributes for the GSS-API Extensible Authentication Protocol (EAP) Mechanism π
- RFC number: 7056 π
- Published by: Internet Engineering Task Force (IETF) πΈ
- Category: Standards Track, so it's an Internet Standards Track document β
- Date: December 2013 π¦
- Authors: S. Hartman (Painless Security) and J. Howlett (JANET(UK)) π
- ISSN: 2070-1721
- Obsoletes / updates: the title block doesn't list anything this one obsoletes or updates π§
Abstract
okay so the naming extensions to the Generic Security Service Application Programming Interface (GSS-API) give apps a way to find out the authorization and personalization info tied to GSS-API names π₯ the Extensible Authentication Protocol GSS-API mechanism lets an Authentication, Authorization, and Accounting (AAA) peer send authorization attributes along with an authentication response π it also has tools for processing Security Assertion Markup Language (SAML) messages that show up in that AAA response π«Ά this document explains how to use the Naming Extensions API to get at all of that info β¨
Status of This Memo
this is an Internet Standards Track document π
it's a product of the Internet Engineering Task Force (IETF) and it represents the consensus of the IETF community π«Ά it went through public review and was approved for publication by the Internet Engineering Steering Group (IESG) π for more on Internet Standards, check out Section 2 of RFC 5741 π
for the current status, any errata, and how to send feedback, go to http://www.rfc-editor.org/info/rfc7056 π
Copyright Notice
Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved. πΈ
this document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the publication date π please actually read these, because they spell out your rights and restrictions π any Code Components pulled out of this document have to include the Simplified BSD License text described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Simplified BSD License π
Table of Contents
1. Introduction ....................................................3
2. Requirements Notation ...........................................3
3. Naming Extensions and SAML ......................................3
4. Federated Context ...............................................4
5. Name Attributes for GSS-EAP .....................................5
6. Names of SAML Attributes in the Federated Context ...............6
6.1. Assertions .................................................6
6.2. SAML Attributes ............................................6
6.3. SAML Name Identifiers ......................................7
7. Security Considerations .........................................8
8. IANA Considerations .............................................8
8.1. Registration of the GSS URN Namespace ......................9
9. Acknowledgements ................................................9
10. References ....................................................10
10.1. Normative References .....................................10
10.2. Informative References ...................................11
1. Introduction β¨
the naming extensions [RFC6680] to the Generic Security Service Application Programming Interface (GSS-API) [RFC2743] are the mechanism that lets apps find out the authorization and personalization info linked to GSS-API names π the Extensible Authentication Protocol GSS-API mechanism [RFC7055] lets an Authentication, Authorization, and Accounting (AAA) peer send authorization attributes alongside an authentication response π¦ it also has ways to process Security Assertion Markup Language (SAML) messages that come in the AAA response π₯ other mechanisms like SAML Enhanced Client (EC) [SASL-SAML] also support SAML assertions and attributes carried in the GSS-API, so that's a whole vibe π this document tells you how to use the Naming Extensions API to get all of that info π§
the semantics of setting attributes defined in this specification are undefined and left to future work π so that part's just vibes for now π
2. Requirements Notation π
the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document get read the way [RFC2119] describes π these are the official capitalized requirement words, so keep an eye out for them π
3. Naming Extensions and SAML π
SAML assertions can carry attributes that describe properties of the assertion's subject π for example, an assertion might carry an attribute about someone's organizational affiliation or email address πΈ according to Sections 8.2 and 2.7.3.1 of [OASIS], an attribute name has two parts π«Ά the first is a Universal Resource Identifier (URI) that describes the format of the name π¦ the second part is the actual name, and its form depends on that format URI π₯ GSS-API name attributes can take a form that starts with a URI describing the form of the name, and the rest of the name is specified by that URI β¨
SAML attributes carried in GSS-API names have three parts, which is giving very structured energy π the first is a Universal Resource Name (URN) saying that the name is a SAML attribute and describing the context (Section 4) π then comes a space, the URI for the format of the SAML name, another space, and finally the SAML attribute name π the URI for the format of the SAML attribute name is not optional, and it MUST be present π₯ no skipping it, bestie π
SAML attribute names might not be globally unique π§ lots of names that use URNs or URIs probably have semantics that don't depend on the issuer πΈ but other name formats, including unspecified ones, make it super easy for two issuers to pick the same name for attributes that mean different things π attributes in the federated context (Section 4) are issued by the same party that does the authentication π«Ά so based on who the subject of the name is, you can figure out what the attribute means β¨
4. Federated Context π
GSS-API naming extensions have the concept of an authenticated name attribute π the mechanism guarantees that what's in an authenticated name attribute is an authenticated statement from the trusted source of the peer credential π¦ but the fact that an attribute is authenticated doesn't mean the trusted source of the peer credential is authorized to assert that attribute π that distinction is important, babe π
in the federated context, the trusted source of the peer credential is usually some identity provider π in the GSS EAP mechanism, info gets combined from AAA and SAML sources π₯ the SAML Identity Provider (IdP) and the home AAA server are assumed to be in the same trust domain π«Ά but that trust domain usually isn't the same as the service's trust domain π with other SAML mechanisms that use this specification, the SAML assertion also comes from the party doing the authentication π§ and typically the IdP is run by another organization in the same federation π
the IdP is trusted to make some statements, especially ones about the context of a federation π for example, participants in an academic federation would usually trust an IdP's assertions about whether someone is a student or a professor π but that same IdP wouldn't usually be trusted to make assertions about local entitlements like group membership π so a service MUST make a policy decision about whether the IdP is allowed to assert a particular attribute, and about whether the asserted value is acceptable π₯ that policy can be set up as local configuration on the service, as rules in AAA proxies, or through other deployment-specific mechanisms πΈ
in contrast, attributes in an enterprise context are often verified by a central authentication infrastructure that's trusted to assert most or all attributes π for example, in a Kerberos infrastructure, the Key Distribution Center (KDC) usually tells servers about a client's group membership using KDC-authenticated authorization data π¦
the context of an attribute is a super important property of that attribute, and trust context is a big part of that overall context π so, for applications to tell attribute contexts apart, attributes with different contexts need different names π«Ά this specification defines attribute names for SAML and AAA attributes in the federated context β¨
these names MUST NOT be used for attributes issued by a party other than one closely associated with the source of credentials, unless the source of credentials is re-asserting the attributes π π for example, a source of credentials can check whatever attribute sources it wants, but acceptors can assume attributes in the federated context come from the source of credentials π§ this requirement is usually enforced in mechanism specifications π for example, [AAA-SAML] gives enough info that we know the attributes it carries today are in the federated context π and similarly, we know the requirements of this paragraph are met by SAML mechanisms where the assertion is the means of authentication π
5. Name Attributes for GSS-EAP β¨
okay so this section is all about how RADIUS attributes get named when they come back in an access-accept message from the GSS-EAP [RFC7055] mechanism π the attributes here are only for that one message, and using them in other RADIUS messages or before access-accept is undefined for now π future specs can explore that stuff as long as they keep backward compatibility in mind π«Ά the big thing is that this spec says what these attributes mean for the src_name output of GSS_Accept_sec_context once it returns GSS_S_COMPLETE π attributes MAY be absent, and values MAY change in other circumstances, and future specifications MAY define that behavior π¦
the name starts with urn:ietf:params:gss:radius-attribute (basically a URN saying "this is a GSS-EAP RADIUS AVP" π) then a space, then a numeric RADIUS name like in Section 2.7 of [RFC6929] β¨ so the User-Name attribute is "urn:ietf:params:gss:radius-attribute 1" π and extended type 1 inside type 241 would be "urn:ietf:params:gss:radius-attribute 241.1" πΈ
here's a super typical case π the RADIUS access-accept has the User-Name attribute in it. an app that wants that value would first wait until GSS-_Accept_sec_context returns GSS_S_COMPLETE π₯Ή then it takes the src_name output from GSS_Accept_sec_context and calls GSS_Get_name_attribute with that name and the attribute "urn:ietf:params:gss:radius-attribute 1" as inputs π
once it confirms the authenticated boolean output is true, the username is sitting right there in the values output π
the value of a RADIUS attribute is the raw octets of the packet, and integers are in network byte order π§ the display value SHOULD be a human-readable string π the catch is the implementation can only make that string if it knows the type of that RADIUS attribute π if there are multiple attributes with the same name in one RADIUS message, a multi-valued GSS-API attribute SHOULD be returned π the exception (lowkey important!) is that implementations SHOULD concatenate things like EAP message or the big multi-attribute ones from [RFC6929] that carry more than 253 octets of info π₯
6. Names of SAML Attributes in the Federated Context β¨
6.1. Assertions
an assertion made by the credential source is named "urn:ietf:params:gss:federated-saml-assertion" π its value is the assertion carried in the AAA protocol or used for auth in a SAML mechanism π¦ this attribute is absent from a given acceptor name if there's no assertion or if the assertion fails local policy checks π
when GSS_Get_name_attribute gets called, this attribute comes back with authenticated set to true ONLY if the mechanism can actually authenticate the SAML statement π for GSS-EAP that's true when the AAA exchange has successfully authenticated π but uses of the GSS-API MUST confirm the attribute is marked authenticated, since other mechanisms MAY let an initiator give an unauthenticated SAML statement π
mechanisms MAY do extra local policy checks and MAY remove the attribute for assertions that fail those checks β¨
6.2. SAML Attributes
each attribute in the assertion SHOULD also be a GSS name attribute πΈ this name has three parts, separated by ASCII spaces π«Ά the first part is urn:ietf:params:gss:federated-saml-attribute π the second part is the URI from the <saml:Attribute> element's NameFormat XML attribute π§ the last part is the Name XML attribute from that same element π the SAML attribute name itself can have spaces in it too π and as the URI spec [RFC3986] requires, spaces inside a URI get encoded as "%20" π
those encoded spaces (even in the first or second part) do NOT split the GSS-API attribute name, because they're just part of the URI π¦
here's the example π if the eduPersonEntitlement attribute is in an assertion, you could get back this name from GSS_Inquire_Name:
urn:ietf:params:gss:federated-saml-attribute
urn:oasis:names:tc:SAML:2.0:attrname-format:uri
urn:oid:1.3.6.1.4.1.5923.1.1.1.7
if an app calls GSS_Get_name_attribute with that attribute in the attr parameter, the values output will include one or more entitlement URIs tied to the authenticated user π
if the content of each <saml:AttributeValue> element is a simple text node (or nodes), then the raw AND "display" values of the GSS name attribute MUST be the text content of those elements π the raw value MUST be encoded as UTF-8 π₯
if the value isn't simple or it's empty, then the raw value(s) MUST be a namespace well-formed serialization [XMLNS] of the <saml:AttributeValue> element(s), encoded as UTF-8 π the "display" values are implementation defined π§
these attributes SHOULD be marked authenticated when they're in SAML assertions that have been successfully validated back to the trusted source of the peer credential π in GSS-EAP, a SAML assertion carried in an integrity-protected and authenticated AAA protocol SHALL be successfully validated, and attributes from that assertion SHALL be returned from GSS_Get_name_attribute with authenticated set to true π an implementation MAY apply local policy checks to each attribute in that assertion and throw out any attribute that doesn't pass π₯Ή
6.3. SAML Name Identifiers
the <saml:NameID> in the assertion's subject SHOULD also be a GSS name attribute πΈ this name has two parts, separated by an ASCII space π
the first part is urn:ietf:params:gss:federated-saml-nameid π the second part is the URI from the <saml:NameID> element's Format XML attribute π¦
the raw value of the GSS name attribute MUST be the well-formed serialization of the <saml:NameID> element, encoded as UTF-8 β¨ the "display" value is implementation defined π«Ά for formats defined by Section 8.3 of [OASIS], missing NameQualifier or SPNameQualifier XML attribute values MUST be filled in according to the format's definition BEFORE serialization π in other words, the defaulting rules for the "persistent" and "transient" formats MUST be applied before serialization happens π₯
this attribute SHOULD be marked authenticated if the name identifier is in a SAML assertion that's been successfully validated back to the trusted source of the peer credential π in GSS-EAP, a SAML assertion carried in an integrity-protected and authenticated AAA protocol SHALL be sufficiently validated π an implementation MAY apply local policy checks to this assertion and discard it if it's unacceptable under those checks π§
7. Security Considerations ππ
this document describes how to access RADIUS attributes, SAML attributes, and SAML assertions from some GSS-API mechanisms π these attributes are typically used for one of two things π the least sensitive one is personalization: a central service MAY provide info about an authenticated user so they don't have to type it in for every acceptor they hit π«Ά the more sensitive use is authorization, and that one is serious business π
the mechanism is responsible for authentication and integrity protection of the attributes π but the acceptor application is responsible for deciding whether the credential source is trusted to assert the attribute, and for validating the asserted value π mechanisms are allowed to do local policy checks on SAML assertions, attributes, and name identifiers exposed through the name attributes defined here π¦ if there's another way to reach the SAML assertion (like the mechanism in [AAA-SAML]), an application MAY get different results depending on how the SAML is accessed π this is intended behavior, and apps that choose to bypass local policy checks SHOULD do their own evaluation before relying on the info ππ
8. IANA Considerations β¨
a new top-level registry has been created called "Generic Security Service Application Program Interface Parameters" π inside it, a subregistry called "GSS-API URN Parameters" was created πΈ registration in this registry is by the IETF Review or Expert Review procedures [RFC5226] π
this paragraph is guidance for Designated Experts π§ registrations here are generally only expected as part of protocols published as RFCs on the IETF stream, since other URIs are better choices for non-IETF work π«Ά Expert Review is mainly there to allow early registration for specs under development, once the community thinks they're mature enough π₯Ή the expert SHOULD evaluate the maturity and stability of such an IETF-stream spec π₯ experts SHOULD review anything NOT from the IETF stream for consistency and consensus with current practice π and honestly? today, those requests typically wouldn't get approved π
if the "paramname" parameter is registered in this registry, its URN will be "urn:ietf:params:gss:paramname" π the initial registrations are below π
+--------------------------+-------------+
| Parameter | Reference |
+--------------------------+-------------+
| radius-attribute | Section 5 |
| federated-saml-assertion | Section 6.1 |
| federated-saml-attribute | Section 6.2 |
| federated-saml-nameid | Section 6.3 |
+--------------------------+-------------+
8.1. Registration of the GSS URN Namespace
IANA has registered the "gss" URN sub-namespace in the IETF URN sub-namespace for protocol parameters defined in [RFC3553] πβ¨
Registry Name: gss
Specification: RFC 7056
Repository: GSS-API URN Parameters (Section 8)
Index Value: Sub-parameters MUST be specified in UTF-8 using standard
URI encoding where necessary.
the index value is the key part here π sub-parameters MUST be specified in UTF-8, using standard URI encoding where it's needed π§
9. Acknowledgements π«Ά
Scott Cantor contributed significant text and multiple reviews of this document π
the authors would like to thank Stephen Farrell, Luke Howard, and Jim Schaad π
Sam Hartman's work on this specification has been funded by Janet πΈ
10. References π
10.1. Normative References
okay these are the ones you HAVE to read before you touch the spec πβ¨ no skipping bestie, they're load-bearing π«Ά
[OASIS] Cantor, S., Kemp, J., Philpott, R., and E. Maler,
"Assertions and Protocol for the OASIS Security Assertion
Markup Language (SAML) V2.0", OASIS Standard
saml-core-2.0-os, March 2005.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2743] Linn, J., "Generic Security Service Application Program
Interface Version 2, Update 1", RFC 2743, January 2000.
[RFC3553] Mealling, M., Masinter, L., Hardie, T., and G. Klyne, "An
IETF URN Sub-namespace for Registered Protocol
Parameters", BCP 73, RFC 3553, June 2003.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
IANA Considerations Section in RFCs", BCP 26, RFC 5226,
May 2008.
[RFC6680] Williams, N., Johansson, L., Hartman, S., and S.
Josefsson, "Generic Security Service Application
Programming Interface (GSS-API) Naming Extensions", RFC
6680, August 2012.
[RFC6929] DeKok, A. and A. Lior, "Remote Authentication Dial In
User Service (RADIUS) Protocol Extensions", RFC 6929,
April 2013.
[RFC7055] Hartman, S., Ed. and J. Howlett, "A GSS-API Mechanism for
the Extensible Authentication Protocol", RFC 7055,
December 2013.
[XMLNS] W3C, "XML Namespaces Conformance", 2009,
<http://www.w3.org/TR/2009/REC-xml-names-20091208/
#Conformance>.
10.2. Informative References
these ones are the extra reading πΈ helpful, not required, but they're giving context and I love a good side quest π
[AAA-SAML] Howlett, J. and S. Hartman, "A RADIUS Attribute, Binding,
Profiles, Name Identifier Format, and Confirmation
Methods for SAML", Work in Progress, July 2013.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66, RFC
3986, January 2005.
[SASL-SAML] Cantor, S. and S. Josefsson, "SAML Enhanced Client SASL
and GSS-API Mechanisms", Work in Progress, September
2013.
Authors' Addresses π¦
meet the people who wrote this one π§π
Sam Hartman
Painless Security
EMail: hartmans-ietf@mit.edu
Josh Howlett
JANET(UK)
EMail: josh.howlett@ja.net
π¦ where this page comes from
- ietf: rfc7056 2013-12
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms