Ich habe ASP.NET MVC-Anwendung, die Benutzer von Google-Konto über OWIN-Bibliothek authentifizieren.Authentifizieren ASP.NET MVC App mit OWIN ohne Anmeldung an Google Mail usw.
Die Benutzer werden irgendwann in der Web-App auf Host-Computer (Kunden) Computer, öffentliche Computer zur Verwaltung einiger Daten in der Web-App erwartet.
Es gibt eine Login-Schaltfläche, die Sie auf die Google-Anmeldeseite umleitet, Nutzer Benutzername und Passwort eingeben und zu dieser Web-App weitergeleitet wird. Bis jetzt ist es in Ordnung, so funktioniert OWIN normalerweise.
Es besteht ein Risiko, dass der Benutzer vergessen, die App auszuloggen und jemand die Daten aus der Web App erfasst. Dies ist ein Risiko in jeder Web-App richtig, ich muss es akzeptieren. Es besteht jedoch ein zusätzliches Risiko, dass jemand, wenn er sich abgemeldet hat, alle E-Mails von Google Mail, Google-Dokumenten und allen zugehörigen Google-Diensten erfasst.
Ich möchte die OWIN-Authentifizierung in der Art und Weise ändern, dass nachdem OWIN Benutzer auf die Google-Anmeldeseite umleitet, Google die Autorisierung an die Web-App ohne Login-Benutzer an Google Mail und alle damit verbundenen Google-Dienste im Webbrowser weitergibt.
Folgende Code auch Login in Gmail als Nebeneffekt der Web-App-Authentifizierung. Ich sehe, dass es viele Konfigurationsoptionen von OWIN gibt. Ich glaube es ist erreichbar:
public partial class Startup
{
private double _expirationTimeCookies = 30; // minutes - sliding expiration
public static ApplicationUserManager ApplicationUserManagerCreate(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var userStore = new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>());
var tokenProvider = new DataProtectorTokenProvider<ApplicationUser>(options.DataProtectionProvider.Create("ASP.NET Identity"));
ApplicationUserManager manager = new ApplicationUserManager(userStore);
manager.EmailService = new EmailService();
manager.SmsService = new SmsService();
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider = tokenProvider;
}
return ApplicationUserManager.Create(tokenProvider, manager);
}
public void ConfigureAuth(IAppBuilder app)
{
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManagerCreate);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
ExpireTimeSpan = TimeSpan.FromMinutes(_expirationTimeCookies),
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, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(_expirationTimeCookies),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager, Helpers.IdentityExtensions.OnlineSettingsForAccount(user.Id)))
}
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
{
ClientId = "xxxxxxxxxx.apps.googleusercontent.com",
ClientSecret = "xxxxxxx",
Provider = new GoogleOAuth2AuthenticationProvider()
{
OnApplyRedirect = delegate(GoogleOAuth2ApplyRedirectContext context)
{
string redirect = context.RedirectUri;
redirect += "&prompt=select_account";
context.Response.Redirect(redirect);
}
},
});
}
}
Also, um zu verdeutlichen: Ihre App läuft auf einem öffentlichen Computer, und Sie möchten verhindern, dass der nächste Benutzer GMail und andere Google-Dienste des vorherigen Benutzers öffnen kann, wenn ein Verbraucher vergisst, sich abzumelden? – CodeCaster
Und wie überprüft Google diesen Nutzer, ohne dass er sich bei Google Services anmeldet? – Evk
@CodeCaster Ja, genau. – qub1n