diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2009-06-01 20:51:04 -0700 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2009-06-02 16:59:50 -0700 |
commit | 11be1a031e76839c02b663c2efebdbbbfad8d775 (patch) | |
tree | fcfc742783668eeba3b437a3dd59f42a64a0f095 /samples/OpenIdProviderMvc/Controllers/OpenIdController.cs | |
parent | f594aa3a0d0399f57858dc9933b3437dd60b63a1 (diff) | |
download | DotNetOpenAuth-11be1a031e76839c02b663c2efebdbbbfad8d775.zip DotNetOpenAuth-11be1a031e76839c02b663c2efebdbbbfad8d775.tar.gz DotNetOpenAuth-11be1a031e76839c02b663c2efebdbbbfad8d775.tar.bz2 |
Working RP and OP samples demonstrating the GSA profile.
But I need to refactor the ISecurityProfile so that OPs can support the GSA profile without requiring that all RPs comply with it's RequireSsl setting for RP discovery.
Diffstat (limited to 'samples/OpenIdProviderMvc/Controllers/OpenIdController.cs')
-rw-r--r-- | samples/OpenIdProviderMvc/Controllers/OpenIdController.cs | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/samples/OpenIdProviderMvc/Controllers/OpenIdController.cs b/samples/OpenIdProviderMvc/Controllers/OpenIdController.cs index 8aad0ba..d533ddb 100644 --- a/samples/OpenIdProviderMvc/Controllers/OpenIdController.cs +++ b/samples/OpenIdProviderMvc/Controllers/OpenIdController.cs @@ -8,6 +8,7 @@ namespace OpenIdProviderMvc.Controllers { using DotNetOpenAuth.ApplicationBlock.Provider; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId; + using DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy; using DotNetOpenAuth.OpenId.Provider; using OpenIdProviderMvc.Code; @@ -20,17 +21,33 @@ namespace OpenIdProviderMvc.Controllers { } [ValidateInput(false)] - public ActionResult PpidProvider() { - return this.DoProvider(true); - } - - [ValidateInput(false)] public ActionResult Provider() { - return this.DoProvider(false); + IRequest request = OpenIdProvider.GetRequest(); + if (request != null) { + var authRequest = request as IAuthenticationRequest; + if (authRequest != null) { + PendingAuthenticationRequest = authRequest; + if (authRequest.IsReturnUrlDiscoverable(OpenIdProvider) == RelyingPartyDiscoveryResult.Success && + User.Identity.IsAuthenticated && + (authRequest.IsDirectedIdentity || Models.User.GetClaimedIdentifierForUser(User.Identity.Name) == authRequest.LocalIdentifier)) { + return this.SendAssertion(); + } 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(); + } } [Authorize] - public ActionResult SendAssertion(bool pseudonymous) { + public ActionResult SendAssertion() { IAuthenticationRequest authReq = PendingAuthenticationRequest; PendingAuthenticationRequest = null; if (authReq == null) { @@ -38,8 +55,7 @@ namespace OpenIdProviderMvc.Controllers { } Identifier localIdentifier = Models.User.GetClaimedIdentifierForUser(User.Identity.Name); - - if (pseudonymous) { + if (this.IsPpidRequested(authReq)) { if (!authReq.IsDirectedIdentity) { throw new InvalidOperationException("Directed identity is the only supported scenario for anonymous identifiers."); } @@ -71,27 +87,19 @@ namespace OpenIdProviderMvc.Controllers { 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", new { pseudonymous = pseudonymous }) }); - } - } + private bool IsPpidRequested(IAuthenticationRequest authRequest) { + if (authRequest == null) { + throw new ArgumentNullException("authRequest"); + } - if (request.IsResponseReady) { - return OpenIdProvider.PrepareResponse(request).AsActionResult(); - } else { - return RedirectToAction("LogOn", "Account"); + var pape = authRequest.GetExtension<PolicyRequest>(); + if (pape != null) { + if (pape.PreferredPolicies.Contains(AuthenticationPolicies.PrivatePersonalIdentifier)) { + return true; } - } else { - return View(); } + + return false; } } } |