Created
April 13, 2017 04:22
-
-
Save NVentimiglia/dd306f0ddcf1f51d2eba9f670f296d3b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ApplicationSignInManager : SignInManager<UserData, string> | |
{ | |
public ApplicationSignInManager(ApplicationUserManager userManager, IAuthenticationManager authenticationManager) | |
: base(userManager, authenticationManager) | |
{ | |
} | |
public override Task<ClaimsIdentity> CreateUserIdentityAsync(UserData user) | |
{ | |
return user.GenerateUserIdentityAsync((ApplicationUserManager)UserManager); | |
} | |
public static ApplicationSignInManager Create(IdentityFactoryOptions<ApplicationSignInManager> options, IOwinContext context) | |
{ | |
return new ApplicationSignInManager(context.GetUserManager<ApplicationUserManager>(), context.Authentication); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ApplicationUserManager : UserManager<UserData> | |
{ | |
public ApplicationUserManager(IUserStore<UserData> store) | |
: base(store) | |
{ | |
} | |
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) | |
{ | |
var manager = new ApplicationUserManager(new UserStore<UserData>(context.Get<AppDbContext>())); | |
// Configure validation logic for usernames | |
manager.UserValidator = new UserValidator<UserData>(manager) | |
{ | |
AllowOnlyAlphanumericUserNames = false, | |
RequireUniqueEmail = true | |
}; | |
// Configure validation logic for passwords | |
manager.PasswordValidator = new PasswordValidator | |
{ | |
RequiredLength = 5, | |
RequireNonLetterOrDigit = false, | |
RequireDigit = false, | |
RequireLowercase = false, | |
RequireUppercase = false, | |
}; | |
// Configure user lockout defaults | |
manager.UserLockoutEnabledByDefault = true; | |
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5); | |
manager.MaxFailedAccessAttemptsBeforeLockout = 5; | |
// Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user | |
// You can write your own provider and plug it in here. | |
manager.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<UserData> | |
{ | |
MessageFormat = "Your security code is {0}" | |
}); | |
manager.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<UserData> | |
{ | |
Subject = "Security Code", | |
BodyFormat = "Your security code is {0}" | |
}); | |
manager.EmailService = new EmailService(); | |
manager.SmsService = new SmsService(); | |
var dataProtectionProvider = options.DataProtectionProvider; | |
if (dataProtectionProvider != null) | |
{ | |
manager.UserTokenProvider = | |
new DataProtectorTokenProvider<UserData>(dataProtectionProvider.Create("ASP.NET Identity")); | |
} | |
return manager; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public partial class Startup | |
{ | |
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 | |
public void ConfigureAuth(IAppBuilder app) | |
{ | |
// Configure the db context, user manager and signin manager to use a single instance per request | |
app.CreatePerOwinContext(AppDbContext.Create); | |
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); | |
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); | |
app.CreatePerOwinContext(ShippoProvider.Create); | |
// Enable the application to use a cookie to store information for the signed in user | |
// and to use a cookie to temporarily store information about a user logging in with a third party login provider | |
// Configure the sign in cookie | |
app.UseCookieAuthentication(new CookieAuthenticationOptions | |
{ | |
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, | |
LoginPath = new PathString("/Account/Login"), | |
Provider = new CookieAuthenticationProvider | |
{ | |
// Enables the application to validate the security stamp when the user logs in. | |
// This is a security feature which is used when you change a password or add an external login to your account. | |
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, UserData>( | |
validateInterval: TimeSpan.FromDays(30), | |
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) | |
} | |
}); | |
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); | |
// Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process. | |
app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); | |
// Enables the application to remember the second login verification factor such as phone or email. | |
// Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from. | |
// This is similar to the RememberMe option when you log in. | |
app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); | |
// Uncomment the following lines to enable logging in with third party login providers | |
//app.UseMicrosoftAccountAuthentication( | |
// clientId: "", | |
// clientSecret: ""); | |
//app.UseTwitterAuthentication( | |
// consumerKey: "", | |
// consumerSecret: ""); | |
var options = new FacebookAuthenticationOptions | |
{ | |
AppId = ConfigurationManager.AppSettings["FB.Key"], | |
AppSecret = ConfigurationManager.AppSettings["FB.Secret"], | |
Provider = new FacebookAuthenticationProvider | |
{ | |
OnAuthenticated = (context) => | |
{ | |
// All data from facebook in this object. | |
var rawUserObjectFromFacebookAsJson = context.User; | |
// Only some of the basic details from facebook | |
// like id, username, email etc are added as claims. | |
// But you can retrieve any other details from this | |
// raw Json object from facebook and add it as claims here. | |
// Subsequently adding a claim here will also send this claim | |
// as part of the cookie set on the browser so you can retrieve | |
// on every successive request. | |
context.Identity.AddClaim(new Claim("urn:facebook:access_token", context.AccessToken)); | |
context.Identity.AddClaim(new Claim("urn:facebook:email", context.Email)); | |
return Task.FromResult(0); | |
} | |
} | |
}; | |
options.Scope.Add("public_profile"); | |
options.Scope.Add("email"); | |
app.UseFacebookAuthentication(options); | |
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() | |
{ | |
ClientId = ConfigurationManager.AppSettings["Google.Key"], | |
ClientSecret = ConfigurationManager.AppSettings["Google.Secret"], | |
Provider = new GoogleOAuth2AuthenticationProvider() | |
{ | |
OnAuthenticated = (context) => | |
{ | |
context.Identity.AddClaim(new Claim("urn:google:name", context.Identity.FindFirstValue(ClaimTypes.Name))); | |
context.Identity.AddClaim(new Claim("urn:google:email", context.Identity.FindFirstValue(ClaimTypes.Email))); | |
//This following line is need to retrieve the profile image | |
context.Identity.AddClaim(new Claim("urn:google:accesstoken", context.AccessToken, ClaimValueTypes.String, "Google")); | |
return Task.FromResult(0); | |
} | |
} | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment