views:

214

answers:

1

I'm banging my head against a wall trying to get either AttributeExchange or SimpleRegistration working with the 3.2.0.9257 version of DotNetOpenAuth.

Here is what I've done:

  1. Downloaded the 3.2.0.9257 tag from GitHub
  2. Opened the DotNetOpenAuth visual studio solution
  3. Made changes to the OpenIdRelyingPartyMvc sample

The changes are all in the Authenticate method of UserController.

I replaced line 44,

return openid.CreateRequest(Request.Form["openid_identifier"]).RedirectingResponse.AsActionResult();

with the following:

var request = openid.CreateRequest(Request.Form["openid_identifier"]);

// Add SimpleRegistration requests for Email and FullName
var sr = new ClaimsRequest();
sr.Email = DemandLevel.Request;
sr.FullName = DemandLevel.Request;
request.AddExtension(sr);

// Add AttributeExchange requests for Email and FullName
var ax = new FetchRequest();
ax.Attributes.Add(new AttributeRequest(WellKnownAttributes.Contact.Email));
ax.Attributes.Add(new AttributeRequest(WellKnownAttributes.Name.FullName));
request.AddExtension(ax);

return request.RedirectingResponse.AsActionResult();

(I also added the DotNetOpenAuth.OpenId.Extensions.AttributeExchange and DotNetOpenAuth.OpenId.Extensions.SimpleRegistration namespaces.)

Then, further down in the same method, after the "Stage 3 Authenticated", I try to get the responses:

var sr = response.GetExtension<ClaimsResponse>();
var ax = response.GetExtension<FetchResponse>();

However, those responses are always null. I've tried Google, Yahoo, and MyOpenID. In all cases, the authentication works correctly, but no SimpleRegistration or AttributeExchange data is returned.

What am I doing wrong?

+4  A: 

Google doesn't support sreg, and its AX support is email-address-only, and only if you mark the email address as "required" (your code uses the default "optional").

Yahoo doesn't support AX, and its sreg support is a whitelisted RP only.

MyOpenID supports sreg, and a different variety of AX than DotNetOpenAuth uses by default. Are you sure the ClaimsResponse is null when used against MyOpenID? Because in my tests it works fine.

You can get around having to send sreg and AX requests, and the 3 different flavors of AX by just using the AXFetchAsSregTransform behavior described under Getting User Attributes of the DotNetOpenAuth documentation.

Andrew Arnott
Hm, I don't get anything on your test page, either from MyOpenID. Must be something funky with my account (it's 3 years old and almost never used). But back to Google... on your test page, if I set email to "Required", it doesn't come through... does Google work for you on that test page?
Portman
That test I linked to does work against MyOpenID for me. Ya, I'd check that your myopenid account actually has the data you're requesting.The test I linked to won't work for Google because that test is just for Simple Registration, and Google only supports AX. Use this test to test Google, and yes, this also works for me: http://test-id.org/OP/AXFetch.aspx
Andrew Arnott