diff options
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> |