summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2009-11-05 22:21:23 -0800
committerAndrew Arnott <andrewarnott@gmail.com>2009-11-05 22:21:23 -0800
commit7000da3b81ed46ad198926e23df0a390bdbe649c (patch)
tree3b72ea6f4409f4ddd8b99e251f76fe29609e5399
parent7899dc1d5e76db21fc6f6497539cbef0845f277f (diff)
downloadDotNetOpenAuth-7000da3b81ed46ad198926e23df0a390bdbe649c.zip
DotNetOpenAuth-7000da3b81ed46ad198926e23df0a390bdbe649c.tar.gz
DotNetOpenAuth-7000da3b81ed46ad198926e23df0a390bdbe649c.tar.bz2
Starter project template now collects email and name of user and displays that to the user when available.
-rw-r--r--projecttemplates/WebFormsRelyingParty/LoginFrame.aspx15
-rw-r--r--projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs20
-rw-r--r--projecttemplates/WebFormsRelyingParty/Site.Master11
-rw-r--r--projecttemplates/WebFormsRelyingParty/WebFormsRelyingParty.csproj3
4 files changed, 43 insertions, 6 deletions
diff --git a/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx b/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx
index b074076..1d812ad 100644
--- a/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx
+++ b/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx
@@ -3,6 +3,8 @@
<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId.RelyingParty"
TagPrefix="rp" %>
+<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId.Extensions.SimpleRegistration" TagPrefix="sreg" %>
+<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.InfoCard" TagPrefix="ic" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- COPYRIGHT (C) 2009 Andrew Arnott. All rights reserved. -->
<!-- LICENSE: Microsoft Public License available at http://opensource.org/licenses/ms-pl.html -->
@@ -39,8 +41,19 @@
<rp:SelectorProviderButton OPIdentifier="https://www.myopenid.com/" Image="images/myopenid.png" />
<rp:SelectorProviderButton OPIdentifier="https://pip.verisignlabs.com/" Image="images/verisign.gif" SkipBackgroundAuthentication="true" />
<rp:SelectorOpenIdButton Image="images/openid.gif" />
- <rp:SelectorInfoCardButton />
+ <rp:SelectorInfoCardButton>
+ <InfoCardSelector>
+ <ClaimsRequested>
+ <ic:ClaimType Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" IsOptional="false" />
+ <ic:ClaimType Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname" IsOptional="true" />
+ <ic:ClaimType Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname" IsOptional="true" />
+ </ClaimsRequested>
+ </InfoCardSelector>
+ </rp:SelectorInfoCardButton>
</Buttons>
+ <Extensions>
+ <sreg:ClaimsRequest Email="Require" FullName="Request" />
+ </Extensions>
</rp:OpenIdSelector>
<asp:HiddenField runat="server" ID="topWindowUrl" />
<asp:Panel ID="errorPanel" runat="server" EnableViewState="false" Visible="false" ForeColor="Red">
diff --git a/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs b/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs
index 2528b36..e41d167 100644
--- a/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs
+++ b/projecttemplates/WebFormsRelyingParty/LoginFrame.aspx.cs
@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Globalization;
+ using System.IdentityModel.Claims;
using System.Linq;
using System.Web;
using System.Web.Security;
@@ -26,11 +27,11 @@
}
protected void openIdSelector_LoggedIn(object sender, OpenIdEventArgs e) {
- this.LoginUser(e.ClaimedIdentifier, e.Response.FriendlyIdentifierForDisplay, e.Response.GetExtension<ClaimsResponse>());
+ this.LoginUser(e.ClaimedIdentifier, e.Response.FriendlyIdentifierForDisplay, e.Response.GetExtension<ClaimsResponse>(), null);
}
- protected void openIdSelector_ReceivedToken(object sender, DotNetOpenAuth.InfoCard.ReceivedTokenEventArgs e) {
- this.LoginUser(AuthenticationToken.SynthesizeClaimedIdentifierFromInfoCard(e.Token.UniqueId), e.Token.SiteSpecificId, null);
+ protected void openIdSelector_ReceivedToken(object sender, ReceivedTokenEventArgs e) {
+ this.LoginUser(AuthenticationToken.SynthesizeClaimedIdentifierFromInfoCard(e.Token.UniqueId), e.Token.SiteSpecificId, null, e.Token);
}
protected void openIdSelector_Failed(object sender, OpenIdEventArgs e) {
@@ -45,7 +46,7 @@
this.errorPanel.Visible = true;
}
- private void LoginUser(string claimedIdentifier, string friendlyIdentifier, ClaimsResponse claims) {
+ private void LoginUser(string claimedIdentifier, string friendlyIdentifier, ClaimsResponse claims, Token samlToken) {
// Create an account for this user if we don't already have one.
AuthenticationToken openidToken = Global.DataContext.AuthenticationToken.FirstOrDefault(token => token.ClaimedIdentifier == claimedIdentifier);
if (openidToken == null) {
@@ -70,6 +71,17 @@
user.FirstName = claims.FullName;
}
}
+ } else if (samlToken != null) {
+ string email, givenName, surname;
+ if (samlToken.Claims.TryGetValue(ClaimTypes.Email, out email)) {
+ user.EmailAddress = email;
+ }
+ if (samlToken.Claims.TryGetValue(ClaimTypes.GivenName, out givenName)) {
+ user.FirstName = givenName;
+ }
+ if (samlToken.Claims.TryGetValue(ClaimTypes.Surname, out surname)) {
+ user.LastName = surname;
+ }
}
Global.DataContext.AddToUser(user);
diff --git a/projecttemplates/WebFormsRelyingParty/Site.Master b/projecttemplates/WebFormsRelyingParty/Site.Master
index 2df05ac..f4e1a25 100644
--- a/projecttemplates/WebFormsRelyingParty/Site.Master
+++ b/projecttemplates/WebFormsRelyingParty/Site.Master
@@ -15,7 +15,16 @@
<div style="float: right">
<asp:LoginView runat="server">
<LoggedInTemplate>
- <%= Global.DataContext.AuthenticationToken.First(token => token.ClaimedIdentifier == Page.User.Identity.Name).FriendlyIdentifier %>
+ <%
+ var authToken = Global.DataContext.AuthenticationToken.Include("User").First(token => token.ClaimedIdentifier == Page.User.Identity.Name);
+ if (!string.IsNullOrEmpty(authToken.User.EmailAddress)) {
+ Response.Write(HttpUtility.HtmlEncode(authToken.User.EmailAddress));
+ } else if (!string.IsNullOrEmpty(authToken.User.FirstName)) {
+ Response.Write(HttpUtility.HtmlEncode(authToken.User.FirstName));
+ } else {
+ Response.Write(HttpUtility.HtmlEncode(authToken.FriendlyIdentifier));
+ }
+ %>
| <asp:HyperLink runat="server" NavigateUrl="~/" Text="Home" /> | <asp:HyperLink
runat="server" NavigateUrl="~/Members/AccountInfo.aspx" Text="Account" /> |
<asp:LoginStatus ID="LoginStatus1" runat="server" />
diff --git a/projecttemplates/WebFormsRelyingParty/WebFormsRelyingParty.csproj b/projecttemplates/WebFormsRelyingParty/WebFormsRelyingParty.csproj
index 824195a..5c36d34 100644
--- a/projecttemplates/WebFormsRelyingParty/WebFormsRelyingParty.csproj
+++ b/projecttemplates/WebFormsRelyingParty/WebFormsRelyingParty.csproj
@@ -51,6 +51,9 @@
<Reference Include="System.Data.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
+ <Reference Include="System.IdentityModel">
+ <RequiredTargetFramework>3.0</RequiredTargetFramework>
+ </Reference>
<Reference Include="System.Runtime.Serialization">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>