diff options
Diffstat (limited to 'samples/OpenIdProviderWebForms')
-rw-r--r-- | samples/OpenIdProviderWebForms/OpenIdProviderWebForms.csproj | 4 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/Web.config | 5 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/decide.aspx.cs | 7 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/login.aspx | 10 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/login.aspx.cs | 28 | ||||
-rw-r--r-- | samples/OpenIdProviderWebForms/login.aspx.designer.cs | 39 |
6 files changed, 90 insertions, 3 deletions
diff --git a/samples/OpenIdProviderWebForms/OpenIdProviderWebForms.csproj b/samples/OpenIdProviderWebForms/OpenIdProviderWebForms.csproj index 603b372..4cd84c1 100644 --- a/samples/OpenIdProviderWebForms/OpenIdProviderWebForms.csproj +++ b/samples/OpenIdProviderWebForms/OpenIdProviderWebForms.csproj @@ -183,6 +183,10 @@ <Project>{3191B653-F76D-4C1A-9A5A-347BC3AAAAB7}</Project> <Name>DotNetOpenAuth</Name> </ProjectReference> + <ProjectReference Include="..\DotNetOpenAuth.ApplicationBlock\DotNetOpenAuth.ApplicationBlock.csproj"> + <Project>{AA78D112-D889-414B-A7D4-467B34C7B663}</Project> + <Name>DotNetOpenAuth.ApplicationBlock</Name> + </ProjectReference> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> diff --git a/samples/OpenIdProviderWebForms/Web.config b/samples/OpenIdProviderWebForms/Web.config index b76231b..de92621 100644 --- a/samples/OpenIdProviderWebForms/Web.config +++ b/samples/OpenIdProviderWebForms/Web.config @@ -62,6 +62,11 @@ <reporting enabled="true" /> </dotNetOpenAuth> + <appSettings> + <!-- Get your own Yubico API key here: https://upgrade.yubico.com/getapikey/ --> + <add key="YubicoAPIKey" value="3961"/> + </appSettings> + <system.web> <!-- Set compilation debug="true" to insert debugging diff --git a/samples/OpenIdProviderWebForms/decide.aspx.cs b/samples/OpenIdProviderWebForms/decide.aspx.cs index b392d85..40c17c0 100644 --- a/samples/OpenIdProviderWebForms/decide.aspx.cs +++ b/samples/OpenIdProviderWebForms/decide.aspx.cs @@ -50,7 +50,12 @@ namespace OpenIdProviderWebForms { this.profileFields.SetRequiredFieldsFromRequest(requestedFields); if (!IsPostBack) { var sregResponse = requestedFields.CreateResponse(); - sregResponse.Email = Membership.GetUser().Email; + + // We MAY not have an entry for this user if they used Yubikey to log in. + MembershipUser user = Membership.GetUser(); + if (user != null) { + sregResponse.Email = Membership.GetUser().Email; + } this.profileFields.SetOpenIdProfileFields(sregResponse); } } diff --git a/samples/OpenIdProviderWebForms/login.aspx b/samples/OpenIdProviderWebForms/login.aspx index e8f42c5..f7898cc 100644 --- a/samples/OpenIdProviderWebForms/login.aspx +++ b/samples/OpenIdProviderWebForms/login.aspx @@ -14,4 +14,14 @@ <tr><td>bob3</td><td>test</td></tr> <tr><td>bob4</td><td>test</td></tr> </table> + + <asp:Panel DefaultButton="yubicoButton" runat="server" style="margin-top: 25px" ID="yubicoPanel"> + Login with Yubikey: + <asp:TextBox runat="server" type="text" ID="yubicoBox" ToolTip="Click here and press your Yubikey button." + style="background-image: url(http://yubico.com/favicon.ico); background-repeat: no-repeat; background-position: 0px 1px; padding-left: 18px; width: 20em;" + MaxLength="44" AutoCompleteType="Disabled" /> + <asp:Button runat="server" ID="yubicoButton" Text="Login" + onclick="yubicoButton_Click" /> + <asp:Label Text="[Yubikey Result]" runat="server" EnableViewState="false" Visible="false" ForeColor="Red" ID="yubikeyFailureLabel" /> + </asp:Panel> </asp:Content>
\ No newline at end of file diff --git a/samples/OpenIdProviderWebForms/login.aspx.cs b/samples/OpenIdProviderWebForms/login.aspx.cs index 4051877..ef5b2c4 100644 --- a/samples/OpenIdProviderWebForms/login.aspx.cs +++ b/samples/OpenIdProviderWebForms/login.aspx.cs @@ -1,6 +1,10 @@ namespace OpenIdProviderWebForms { using System; + using System.Configuration; + using System.Globalization; + using System.Web.Security; using System.Web.UI.WebControls; + using DotNetOpenAuth.ApplicationBlock; using DotNetOpenAuth.OpenId.Provider; /// <summary> @@ -9,6 +13,8 @@ namespace OpenIdProviderWebForms { public partial class login : System.Web.UI.Page { protected void Page_Load(object src, EventArgs e) { if (!IsPostBack) { + this.yubicoPanel.Visible = !string.IsNullOrEmpty(ConfigurationManager.AppSettings["YubicoAPIKey"]); + if (ProviderEndpoint.PendingAuthenticationRequest != null && !ProviderEndpoint.PendingAuthenticationRequest.IsDirectedIdentity) { this.login1.UserName = Code.Util.ExtractUserName( @@ -18,5 +24,27 @@ namespace OpenIdProviderWebForms { } } } + + protected void yubicoButton_Click(object sender, EventArgs e) { + string username; + if (this.TryVerifyYubikeyAndGetUsername(this.yubicoBox.Text, out username)) { + FormsAuthentication.RedirectFromLoginPage(username, false); + } + } + + private bool TryVerifyYubikeyAndGetUsername(string token, out string username) { + var yubikey = new YubikeyRelyingParty(int.Parse(ConfigurationManager.AppSettings["YubicoAPIKey"], CultureInfo.InvariantCulture)); + YubikeyResult result = yubikey.IsValid(token); + switch (result) { + case YubikeyResult.Ok: + username = YubikeyRelyingParty.ExtractUsername(token); + return true; + default: + this.yubikeyFailureLabel.Visible = true; + this.yubikeyFailureLabel.Text = result.ToString(); + username = null; + return false; + } + } } }
\ No newline at end of file diff --git a/samples/OpenIdProviderWebForms/login.aspx.designer.cs b/samples/OpenIdProviderWebForms/login.aspx.designer.cs index 83826a1..307dd96 100644 --- a/samples/OpenIdProviderWebForms/login.aspx.designer.cs +++ b/samples/OpenIdProviderWebForms/login.aspx.designer.cs @@ -1,10 +1,9 @@ //------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. -// Runtime Version:2.0.50727.3521 // // Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ @@ -21,5 +20,41 @@ namespace OpenIdProviderWebForms { /// To modify move field declaration from designer file to code-behind file. /// </remarks> protected global::System.Web.UI.WebControls.Login login1; + + /// <summary> + /// yubicoPanel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Panel yubicoPanel; + + /// <summary> + /// yubicoBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.TextBox yubicoBox; + + /// <summary> + /// yubicoButton control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Button yubicoButton; + + /// <summary> + /// yubikeyFailureLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label yubikeyFailureLabel; } } |