Portman
Portman

Reputation: 31975

How can I get AttributeExchange and/or SimpleRegistration working with MVC?

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?

Upvotes: 2

Views: 621

Answers (1)

Andrew Arnott
Andrew Arnott

Reputation: 81801

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.

Upvotes: 5

Related Questions