我有一个ASP.NET MVC 5网站,我想通过谷歌,Twitter,Facebook和其他一些提供商添加外部登录。我正在学习本教程:http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on
目前,我正在努力让Google登录工作。我在Google上注册了我的网站,并获得了客户ID和客户端密码。我将这两个值保存在PrivateSettings.config文件中,出于安全原因,我将其保留在源代码管理之外。
<appSettings>
<add key="GOOGLE_CLIENT_ID" value="<snip>"/>
<add key="GOOGLE_CLIENT_SECRET" value="<snip>"/>
</appSettings>
我在Web.config中引用我的文件
<appSettings file="PrivateSettings.config">
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
我的项目基于VS2013创建此项目时生成的模板。我遵循与上面提到的教程(个人用户帐户)相同的创建过程,该过程在我的App_Start文件夹中创建了一些配置类。我修改了Startup.Auth.cs文件以添加对Google登录的支持,取消注释app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
位并添加对客户端ID和客户端密钥的引用,如下所示:
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
{
ClientId = ConfigurationManager.AppSettings["GOOGLE_CLIENT_ID"],
ClientSecret = ConfigurationManager.AppSettings["GOOGLE_CLIENT_SECRET"]
});
我还在项目属性中启用了ssl。
当我启动我的应用程序(在本地,我还没有部署它)并尝试使用我的个人帐户通过Google登录时,登录过程在public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
方法中失败,在此行:
var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
抛出Format of the initialization string does not conform to specification starting at index 0
异常。 loginInfo
不为空(在调试时检查,并且在执行此行之前检查,如果loginInfo
为空,则重定向)并包含来自Google的信息(邮件,名称)。
知道可能导致这种情况的原因吗?
答案 0 :(得分:2)
解决。当连接字符串出现问题时,抛出此异常。我正在使用Entity Framework和MySQL。我必须按照本教程http://www.codeproject.com/Tips/788357/How-to-set-up-application-using-ASP-NET-Identity-w启用ASP.NET提供程序的ASP.NET身份。现在Google-OAuth正常运作,传统注册和登录也是如此。