Ell*_*dil 10 c# asp.net-mvc salesforce oauth-2.0 asp.net-mvc-5
我正在尝试使用其OAuth身份验证工作流程来获取针对Salesforce在.NET中验证MVC应用程序的实例.我一直在参考这个非常简单的演练.这与让Google身份验证工作非常相似.它归结为使用个人帐户身份验证模板设置.NET MVC项目,并在Salesforce中启动新的连接应用程序.然后,添加Owin.Security.Providers库的Salesforce,调整Startup.Auth.cs了一下,包括ClientId和ClientSecret从Salesforce的应用程序,授权和令牌端点.它建议的回调网址是http:// localhost:[port]/signin-salesforce,这与用于Google身份验证的回调网址非常相似.
当我被重定向到Salesforce并且可以登录时,将我返回到我的MVC应用程序的握手似乎遇到了一个我无法确定的问题.我被重定向回登录页面,.NET似乎并不知道我的登录信息,虽然我肯定有一个与Salesforce的活动会话(Salesforce仪表板将自动登录我).在代码中,事情开始在这里横行:
// GET: /Account/ExternalLoginCallback
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
//more code we never reach
}
Run Code Online (Sandbox Code Playgroud)
loginInfo永远是空的.因此,为了弄清楚将什么类型的请求发送到.NET,我转向Fiddler并遇到一个请求反对localhost:[port]/signin-salesforce一堆参数得到一个奇怪的响应:
找到HTTP/1.1 302
位置:/ Account/ExternalLoginCallback?error = access_denied
服务器:Microsoft-IIS/10.0
Set-Cookie:.AspNet.Correlation.Salesforce =; 路径= /; expires =周四,01-Jan-1970 00:00:00 GMT
X-SourceFiles:????= UTF-8乙YzpcdXNlcnNcc3RldmUuY2FtaXJlXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTVcUHJvamVjdHNcU2FsZXNGb3JjZUludGVncmF0aW9uXFNhbGVzRm9yY2VJbnRlZ3JhdGlvblxzaWduaW4tc2FsZXNmb3JjZQ == =
X-Powered-By:ASP.NET
日期:2016年5月20日星期五21:46:09 GMT
内容长度:0
请注意Location标头,它告诉.NET重定向到/Account/ExternalLoginCallback错误参数"access_denied".启用一些跟踪Owin显示某些东西在.NET或.NET中返回400,但我不知道是什么.
所以,那就是我所处的位置.一个null在我的控制器和证据LOGININFO对象的东西是在一些Web请求去错了.我已经仔细阅读了其他几个相关问题,但几乎没有人专注于SalesForce,他们提供的答案并不真正适用(例如,我没有启用Google+ API).关于如何纠正这个问题的任何想法?
小智 1
对于每个遇到登录信息问题的人,当它确实不应该返回 null 时,这可能无法解决您的问题,但是我花了几天时间解决 facebook 和 google 的类似问题。我最终在调用ExternalLoginCallback 之前清除了HttpContext 会话,从那时起它就一直工作得很好。并不是说这会解决它,但希望它对某人有所帮助。
//
// POST: /Account/ExternalLogin
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
// Clear any other session first as this seems to cause unexpected null responses.
if (ControllerContext.HttpContext.Session != null)
{
ControllerContext.HttpContext.Session.RemoveAll();
}
// Request a redirect to the external login provider
return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
}
Run Code Online (Sandbox Code Playgroud)
当我测试我的时,我与 Fiddler 进行了检查,我得到了一个令牌,好的,如果你没有得到有效的响应,那么这将无济于事。
| 归档时间: |
|
| 查看次数: |
1236 次 |
| 最近记录: |