summaryrefslogtreecommitdiffstats
path: root/samples/OpenIdProviderMvc/Controllers
diff options
context:
space:
mode:
Diffstat (limited to 'samples/OpenIdProviderMvc/Controllers')
-rw-r--r--samples/OpenIdProviderMvc/Controllers/HomeController.cs4
-rw-r--r--samples/OpenIdProviderMvc/Controllers/OpenIdController.cs70
-rw-r--r--samples/OpenIdProviderMvc/Controllers/UserController.cs6
3 files changed, 41 insertions, 39 deletions
diff --git a/samples/OpenIdProviderMvc/Controllers/HomeController.cs b/samples/OpenIdProviderMvc/Controllers/HomeController.cs
index 346e838..5ba08b3 100644
--- a/samples/OpenIdProviderMvc/Controllers/HomeController.cs
+++ b/samples/OpenIdProviderMvc/Controllers/HomeController.cs
@@ -23,9 +23,5 @@
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 8aad0ba..d70401a 100644
--- a/samples/OpenIdProviderMvc/Controllers/OpenIdController.cs
+++ b/samples/OpenIdProviderMvc/Controllers/OpenIdController.cs
@@ -5,32 +5,50 @@ namespace OpenIdProviderMvc.Controllers {
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
- using DotNetOpenAuth.ApplicationBlock.Provider;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OpenId;
+ using DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy;
using DotNetOpenAuth.OpenId.Provider;
using OpenIdProviderMvc.Code;
public class OpenIdController : Controller {
internal static OpenIdProvider OpenIdProvider = new OpenIdProvider();
+ private static AnonymousIdentifierProvider anonProvider = new AnonymousIdentifierProvider();
+
internal static IAuthenticationRequest PendingAuthenticationRequest {
get { return ProviderEndpoint.PendingAuthenticationRequest; }
set { ProviderEndpoint.PendingAuthenticationRequest = value; }
}
[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,14 +56,14 @@ 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.");
}
- var anonProvider = new AnonymousIdentifierProvider();
- authReq.ScrubPersonallyIdentifiableInformation(localIdentifier, anonProvider);
+ var anonymousIdentifier = anonProvider.GetIdentifier(localIdentifier, authReq.Realm);
+ authReq.ClaimedIdentifier = anonymousIdentifier;
+ authReq.LocalIdentifier = anonymousIdentifier;
authReq.IsAuthenticated = true;
} else {
if (authReq.IsDirectedIdentity) {
@@ -71,27 +89,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;
}
}
}
diff --git a/samples/OpenIdProviderMvc/Controllers/UserController.cs b/samples/OpenIdProviderMvc/Controllers/UserController.cs
index c160fce..3cb87ae 100644
--- a/samples/OpenIdProviderMvc/Controllers/UserController.cs
+++ b/samples/OpenIdProviderMvc/Controllers/UserController.cs
@@ -9,7 +9,7 @@ namespace OpenIdProviderMvc.Controllers {
public class UserController : Controller {
public ActionResult PpidIdentity() {
if (Request.AcceptTypes.Contains("application/xrds+xml")) {
- return View("PpidXrds");
+ return View("Xrds");
}
return View();
@@ -33,10 +33,6 @@ namespace OpenIdProviderMvc.Controllers {
return View();
}
- public ActionResult PpidXrds() {
- return View();
- }
-
private ActionResult RedirectIfNotNormalizedRequestUri() {
Uri normalized = Models.User.GetNormalizedClaimedIdentifier(Request.Url);
if (Request.Url != normalized) {