首页 文章

如何在Visual Studio 2012中为ASP.NET MVC 4配置Microsoft.Owin.Security.Google?

提问于
浏览
0

尝试使用Visual Studio 2012在我的ASP.NET MVC 4项目中使用 Microsoft.Owin.Security.Google 配置设置并使用Google配置登录 .

我一直在关注这篇文章:http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on并检查了其他人,他们都提到将代码放在ASP.NET MVC 4模板没有的 Startup.cs 文件中 .

Microsoft Owin库是否仅适用于ASP.NET MVC 5?

1 回答

  • 0

    是的,使用ASP.NET MVC5实现这一点要容易得多:

    app_start/Startup.Auth.cs

    using Microsoft.Owin.Security.Cookies;
    using Microsoft.Owin.Security.Google;
    using Microsoft.Owin.Security.Facebook;
    using Owin;
    using System.Web.Helpers;
    using System.Security.Claims;
    using System.Threading.Tasks;
    using Microsoft.Owin.Security;
    
    namespace ui.web
    {
        public partial class Startup
        {
            public void ConfigureAuth(IAppBuilder app)
            {
    
                /* Local logins */
                app.UseCookieAuthentication(new CookieAuthenticationOptions
                {
                    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                    LoginPath = new PathString("/login")
                });
    
                app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
    
                /* Google */
                var googleOptions = new GoogleOAuth2AuthenticationOptions
                {
                    ClientId = "clientid",
                    ClientSecret = "secret",
                };
                googleOptions.Scope.Add("https://www.googleapis.com/auth/userinfo.profile");
                googleOptions.Scope.Add("https://www.googleapis.com/auth/userinfo.email");
                app.UseGoogleAuthentication(googleOptions);
    
                /* Facebook */
                var facebookOptions = new FacebookAuthenticationOptions
                {
                    AppId = "clientid",
                    AppSecret = "secret",
                    BackchannelHttpHandler = new FacebookBackChannelHandler(),
                    UserInformationEndpoint = "https://graph.facebook.com/v2.4/me?fields=id,name,email,first_name,last_name,location",
                };
    
                facebookOptions.Scope.Add("email");
                app.UseFacebookAuthentication(facebookOptions);
    
                AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
            }
     }
    }
    

    FacebookBackChannelHandler

    using System;
    using System.Net.Http;
    
    namespace ui.web.infrastructure.auth
    {
        public class FacebookBackChannelHandler : HttpClientHandler
        {
            protected override async System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
            {
                // Replace the RequestUri so it's not malformed
                if (!request.RequestUri.AbsolutePath.Contains("/oauth"))
                {
                    request.RequestUri = new Uri(request.RequestUri.AbsoluteUri.Replace("?access_token", "&access_token"));
                }
    
                return await base.SendAsync(request, cancellationToken);
            }
        }
    }
    

相关问题