diff options
Diffstat (limited to 'samples/OpenIdProviderMvc/Controllers')
3 files changed, 51 insertions, 30 deletions
diff --git a/samples/OpenIdProviderMvc/Controllers/HomeController.cs b/samples/OpenIdProviderMvc/Controllers/HomeController.cs index 5ba08b3..346e838 100644 --- a/samples/OpenIdProviderMvc/Controllers/HomeController.cs +++ b/samples/OpenIdProviderMvc/Controllers/HomeController.cs @@ -23,5 +23,9 @@ public ActionResult Xrds() { return View(); } + + public ActionResult PpidXrds() { + return View(); + } } } diff --git a/samples/OpenIdProviderMvc/Controllers/OpenIdController.cs b/samples/OpenIdProviderMvc/Controllers/OpenIdController.cs index a46c39a..7cfbb45 100644 --- a/samples/OpenIdProviderMvc/Controllers/OpenIdController.cs +++ b/samples/OpenIdProviderMvc/Controllers/OpenIdController.cs @@ -18,27 +18,13 @@ namespace OpenIdProviderMvc.Controllers { } [ValidateInput(false)] - public ActionResult Provider() { - IRequest request = OpenIdProvider.GetRequest(); - if (request != null) { - var authRequest = request as IAuthenticationRequest; - if (authRequest != null) { - PendingAuthenticationRequest = authRequest; - if (User.Identity.IsAuthenticated && (authRequest.IsDirectedIdentity || Models.User.GetClaimedIdentifierForUser(User.Identity.Name) == authRequest.LocalIdentifier)) { - return this.SendAssertion(true); - } else { - return RedirectToAction("LogOn", "Account", new { returnUrl = Url.Action("SendAssertion") }); - } - } + public ActionResult PpidProvider() { + return DoProvider(true); + } - if (request.IsResponseReady) { - return OpenIdProvider.PrepareResponse(request).AsActionResult(); - } else { - return RedirectToAction("LogOn", "Account"); - } - } else { - return View(); - } + [ValidateInput(false)] + public ActionResult Provider() { + return DoProvider(false); } [Authorize] @@ -54,10 +40,6 @@ namespace OpenIdProviderMvc.Controllers { authReq.ClaimedIdentifier = authReq.LocalIdentifier; authReq.IsAuthenticated = true; } else { - if (pseudonymous) { - throw new InvalidOperationException("Pseudonymous identifiers are only available when used with directed identity."); - } - if (authReq.LocalIdentifier == Models.User.GetClaimedIdentifierForUser(User.Identity.Name)) { authReq.IsAuthenticated = true; if (!authReq.IsDelegatedIdentifier) { @@ -71,9 +53,34 @@ namespace OpenIdProviderMvc.Controllers { if (pseudonymous) { var anonProvider = new AnonymousIdentifierProvider(); authReq.ScrubPersonallyIdentifiableInformation(anonProvider, true); + } else { + // TODO: Respond to AX/sreg extension requests here } return OpenIdProvider.PrepareResponse(authReq).AsActionResult(); } + + private ActionResult DoProvider(bool pseudonymous) { + IRequest request = OpenIdProvider.GetRequest(); + if (request != null) { + var authRequest = request as IAuthenticationRequest; + if (authRequest != null) { + PendingAuthenticationRequest = authRequest; + if (User.Identity.IsAuthenticated && (authRequest.IsDirectedIdentity || Models.User.GetClaimedIdentifierForUser(User.Identity.Name) == authRequest.LocalIdentifier)) { + return this.SendAssertion(pseudonymous); + } else { + return RedirectToAction("LogOn", "Account", new { returnUrl = Url.Action("SendAssertion") }); + } + } + + if (request.IsResponseReady) { + return OpenIdProvider.PrepareResponse(request).AsActionResult(); + } else { + return RedirectToAction("LogOn", "Account"); + } + } else { + return View(); + } + } } } diff --git a/samples/OpenIdProviderMvc/Controllers/UserController.cs b/samples/OpenIdProviderMvc/Controllers/UserController.cs index 0a5b04e..c160fce 100644 --- a/samples/OpenIdProviderMvc/Controllers/UserController.cs +++ b/samples/OpenIdProviderMvc/Controllers/UserController.cs @@ -7,19 +7,25 @@ namespace OpenIdProviderMvc.Controllers { using System.Web.Mvc.Ajax; public class UserController : Controller { + public ActionResult PpidIdentity() { + if (Request.AcceptTypes.Contains("application/xrds+xml")) { + return View("PpidXrds"); + } + + return View(); + } + public ActionResult Identity(string id) { - if (!string.IsNullOrEmpty(id)) { - var redirect = this.RedirectIfNotNormalizedRequestUri(); - if (redirect != null) { - return redirect; - } + var redirect = this.RedirectIfNotNormalizedRequestUri(); + if (redirect != null) { + return redirect; } if (Request.AcceptTypes.Contains("application/xrds+xml")) { return View("Xrds"); } - this.ViewData["username"] = string.IsNullOrEmpty(id) ? "anonymous" : id; + this.ViewData["username"] = id; return View(); } @@ -27,6 +33,10 @@ namespace OpenIdProviderMvc.Controllers { return View(); } + public ActionResult PpidXrds() { + return View(); + } + private ActionResult RedirectIfNotNormalizedRequestUri() { Uri normalized = Models.User.GetNormalizedClaimedIdentifier(Request.Url); if (Request.Url != normalized) { |