gpt4 book ai didi

asp.net-mvc - 使用 facebook SDK 登录 MVC5 应用程序时出现错误(error=access_denied)

转载 作者:行者123 更新时间:2023-12-01 01:21:45 24 4
gpt4 key购买 nike

我用 ASP.NET MVC5 开发了一个应用程序。我在我的应用程序中使用了 Facebook 外部身份验证。当我使用“Locallhost”域调试此应用程序时,Facebook 登录运行良好,但当我在主服务器中发布应用程序时,AuthenticationManager.GetExternalLoginInfo() 返回 null,它在 url 中给我这样的错误:

http://xxxxx.com/Account/ExternalLoginCallback?ReturnUrl=%2Fen&error=access_denied#_=_

我在 Facebook 开发控制台中将“站点 URL”设置为“http://xxxx.com”,将“有效的 OAuth 重定向 URI”设置为“http://xxxx.com/signin-facebook”。

我在 Startup.Outh.cs 文件中的设置是:

var FacebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions();
FacebookOptions.AppId = ConfigurationManager.AppSettings["Facebook_User_Key"];
FacebookOptions.AppSecret = ConfigurationManager.AppSettings["Facebook_Secret_Key"];
FacebookOptions.Provider = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationProvider()
{
OnAuthenticated = async context =>
{
context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
foreach (var claim in context.User)
{
var claimType = string.Format("urn:facebook:{0}", claim.Key);
string claimValue = claim.Value.ToString();
if (!context.Identity.HasClaim(claimType, claimValue))
context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Facebook"));
}

}
};
FacebookOptions.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;
app.UseFacebookAuthentication(FacebookOptions);

我不知道为什么只有在我主域名的服务器上外部登录不起作用。请帮我解决这个问题。

最佳答案

我遇到了与您描述的几乎相同的症状:

很快:

Facebook 身份验证在本地主机上运行良好,将项目上传到另一台服务器(并在 Facebook 控制台上更改站点 URL)后,身份验证未成功。

我建议您回滚到 MVC 模板代码,如果可行 - 请注意您对中间件代码 (Startup.Auth.sc) 所做的任何更改。尤其要注意与本地配置交互的代码,例如本地服务的磁盘 I/O 和操作系统权限。

我的特殊情况:

从支持 Owin/Katana 的 WebAPI 项目的 Visual Studio 模板开始,在本地主机上进行测试时,外部登录与 Facebook、Microsoft 和 Google OAuth 中间件完美配合。

后来我向 Startup.Auth.sc 添加了代码,因为我需要进一步的身份验证事件。

原来的代码是这样的:

public void ConfigureAuth(IAppBuilder app)
{
// see WebAPI template of Visual Studio 2013/2015
...
app.UseFacebookAuthentication(
appId: 99999999,
appSecret: *******);
}

这是替换:

public void ConfigureAuth(IAppBuilder app)
{
// see WebAPI template of Visual Studio 2013/2015
...
app.UseFacebookAuthentication(GetFacebookAuth());
}
private FacebookAuthenticationOptions GetFacebookAuth()
{
string picRequest =
String.Format("/me/picture?redirect=false&width={0}&height={0}", ProfileInfoClaimsModel.PIC_SIDE_PX);
var facebookProvider = new FacebookAuthenticationProvider()
{
OnAuthenticated = async (context) =>
{
var client = new FacebookClient(context.AccessToken);
dynamic me = client.Get("/me?fields=id,name,locale");
dynamic mePicture = client.Get(picRequest);

// storing temporary social profile info TO A LOCAL FOLDER
// uploading the local folder to a service WITH A LOCAL CREDENTIAL FILE
...
}

};
var options = new FacebookAuthenticationOptions()
{
AppId = 0123456789,
AppSecret = ******,
Provider = facebookProvider,
};
return options;
}

您可能会注意到我的评论会使问题变得明显 - 代码指向本地资源。

然后,我将项目发布到运行 Windows Server 2012 和 IIS 8.5 的虚拟服务器(通过 Amazon EC2)。从那一刻起,我不断在/signin-facebook 的重定向中收到 error=access_denied

我决定遵循 this 一个很好的旧概念,回到原来的模板代码。很快我发现我忘记配置新服务器了。例如,代码引用的文件夹不存在,站点无权创建它。

显然,这解决了它。

关于asp.net-mvc - 使用 facebook SDK 登录 MVC5 应用程序时出现错误(error=access_denied),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33530636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com