[OpenID] Fw: oauth assertion bearer grant - motivation?
Peter Williams
home_pw at msn.com
Fri Jan 24 21:53:38 UTC 2014
Looking more at the cited openid connect case, I recognize now that we are already doing the same kind of thing as Google, apparently. That is, whereas in Google and an idtoken is apparently issued as a bearer token for OTHER audiences than the requesting party, we just happened to have the issuer of the saml bearer blob perform that role, as it nominally “accompanies” the id_token in the JSON response that retains the AS audience in our world.
The saml bearer token is then swapped at the MicrosoftOnline STS to get an access token for an the simple federation-secured protocols exposed by the public Office 365 APIs. As you say, this all requires that the websso client built into a pure OAUTH or openid connect authorization endpoint should request of the websso IDP that it issue a user--subject assertion with an audience OTHER than the identity of the AS (or in our case, with multiple audiences, the AS and the MicrosoftOnline audience). This also needs to have subject formats suitable for the STS (which are UPNs, and name record persistentIDs, in windows directory land).
Or so we thought. It turns out that the MicrosoftOnline STS is fussy about multiple audiences in the token bearer, and objects to a multiple. So, we played with the above ideas, in ways that are a bit proprietary but entirely standard in terms of using claims/libraries, so we could have multiple saml2 websso tokens coming back, one per audience.
This turned out to have a nice side effect, as now we can request asymmetric keyed tokens for use within the (non Office365) AS-client world. That is, the OAUTH client eventually consuming the AS’s token endpoint uses the saml bearer grant that converts the AS-audience’d SAML blob to JWTs. This was proprietary, but evidently, I can use the “salesforce” standard for that, now. Though, perhaps not …since we use asymmetric keyed bearer grants so that the fabric ends up with what is effectively a saml-blob-format self-signed user cert (in XML format, now).
This hybrid world is working VERY nicely. Asymmetric saml is even allowing “certs” to make a come back, now in a new blob format. We are using them for trust management between tenants of the SAAS space, rather than use directory forests and Kerberos trusts. SOME of still believe… in PKI theory for inter-domain management (when done professionally)
Ok that's it from me for a few months, I think.
Sent from Surface Pro
From: peter Msn
Sent: Thursday, January 23, 2014 8:03 PM
To: John Bradley
Cc: openid-general at lists.openid.net
So lets summarize.
Opened connect, and bearer auth from saml blobs to jwt blogs, are about millions of (X.500 style) security management domains setting up mutual trust relationship, having a cloud fabric (read X.500 chaining directory agent) enforce and enact lots of reliance policies established by namespace, and otherwise swapping id tokens for API guard-passing tokens, with the possibility that a id_token issued by IDP.X is recognized by the token swappers of another cloud, associated with IDP.Y, where X and Y have some policy agreements.
Ok. I get openid connect now. There are several layers of trust relationships, meta-trust relationship, and meta-meta trust (etc), that account for when one IDP relies on another for some or other purpose, as above.
Still think cross-certs were better suited for all this, particularly with the flexible algebra of policy matching built into X.509 v3, but that's a lost battle.
Thanks for the help. Reasons to at least partially adopt openid connect were made obvious. One sees the writing on the wall, now (and it is good).
Sent from Surface Pro
From: John Bradley
Sent: Thursday, January 23, 2014 3:30 PM
To: peter Msn
Cc: openid-general at lists.openid.net
The Bearer grant allows the SAML assertion to be passed directly to the token endpoint as the grant cutting out the Authorization web redirect and return of the code.
This is a optimization useful where the AS doesn't need to collect consent from the user. However the SAML IdP and the AS need to agree on how the scopes to be granted are represented in the assertion.
In Connect it is possible to ask for a id_token with a 3rd party as the audience. (Google is doing that with the play store) That id_token can be used in the JWT bearer grant http://tools.ietf.org/html/draft-ietf-oauth-jwt-bearer to get a access token for a 3rd party API.
So a native app could do Connect authentication hypothetically Google then use it's refresh token to ask for a id_token with SalesForce or Microsoft as the audience and then use the id_token as the JWT grant to get a access token for SF or Azure as examples. This is more likely than Google being able to issue access tokens for those 3rd party API directly.
Yes you can have the app redirect to the AS and the AS do SSO Connect or SAML to a 3rd party IdP and that works but may disclose more information to the AS than is actually required.
So it is an alternate way to cross security boundaries.
John B.
On Jan 23, 2014, at 6:24 PM, Peter Williams <home_pw at msn.com> wrote:
Say just a little more, since this swapping of “enterprise” issued (saml blob) tokens all overlaps with openid connect in my mind - where the latter has different type of jwt: one for passing (classical oauth-powered) access guards at webapis, and those one's delivering identity claims and attributes from a backroom directory.
Ive built and deployed a websso and oauth hybrid. Invoking authorization via a (embedded)Brower requires one to conclude websso, with a wsfedp idp, that mints saml tokens. Said token opens the consent gate, that controls minting of oath grants. Subsequently, Use of token endpoint, citing a one time code or other proof token, returns a Json object with one or more jwts, and the websso bearer token, and an microsoftonline sts-issued(swapped from bearer) token usable at office365 wstrust/wssecurity/wssecureconversation guarded APIs.
thick clients, phone apps, tablet apps and websites acting as agents are all happy with all that. And it fits with today's devices and middleware now (finally) adopted by us realty, and its 300 vendors.
What the oath bearer grant has done is confuse me more, particularly in understanding how the scopes from grants are aggregated, and WHY. I already don't really get how I'm supposed * to use* different jwts, in the openid connect profile, for “radically innovative” use cases that align with how folks are assuming enterprise, and social, and APIs, and mixed app\browser apps are all supposed to work, next generation.
Prehaps a call for a blog post or two?
Sent from Surface Pro
From: John Bradley
Sent: Thursday, January 23, 2014 11:34 AM
To: peter Msn
Cc: openid-general at lists.openid.net
This is the openID list and not a OAuth list, but I will attempt an answer.
For others on the list the specs are http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer and http://tools.ietf.org/html/draft-ietf-oauth-assertions
Basically it is a way to do token translation. In some cases when interfacing with Enterprise systems getting them to issue a SAML token may be easier the simplest thing to do.
The resource server (RS) however likely only understands a single access token form. GUID or JWT for the most part. The assertion profiles let the client translate a JWT or SAML assertion into a OAuth access token.
This can be quite useful in crossing security domains where the AS is relying on a 3rd party to authenticate the user. The AS could redirect to a SAML IDP using websso but on mobile devices that might not be optimal.
The scopes associated with the access token can be a subset of the ones granted by the SAML assertion. In some cases with multiple endpoints you may want to down scope the access token.
The biggest user of this flow is SalesForce as far as I know.
John B.
On Jan 23, 2014, at 3:46 PM, Peter Williams <home_pw at msn.com> wrote:
It took me a while (and several years of lateness) to comprehend just what kind of world the classical oauth grants were designed for. One advantage of being late to the party was that I tended to get better variants, such as a grant returning a JWT bearing attributes rather than using grants that returnee guids as tokens - that had to be subsequently resolved.
So what is the “use case” of the saml2 bearer assertion grant?
I makes perfect sense that someone with a bearer assertion might swap it for a JWT, for use at APIs. And it makes perfect sense that such a saml assertion plays much the same role as a does possession of an optional renewal-token - the one native to an OAUTH handshake.
But I don't see what the “generation changing” motivation is for the scopes - that the access token returns all scopes for which tokens (with renewals) have previous been issued.
So what is the 'context’ of control being enabled here? What thing is this scope-aggregation feature working for?
Sent from Surface Pro
_______________________________________________
general mailing list
general at lists.openid.net
http://lists.openid.net/mailman/listinfo/openid-general
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openid.net/pipermail/openid-general/attachments/20140124/01ed157e/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ATT00001
Type: application/octet-stream
Size: 154 bytes
Desc: ATT00001
URL: <http://lists.openid.net/pipermail/openid-general/attachments/20140124/01ed157e/attachment.obj>
More information about the general
mailing list