2014-11-06 164 views
0

我遇到了一个必须与Microsofts Open Id提供者集成的应用程序的严重问题。微软OpenId登录

我正在使用ASP.NET MVC 5与Microsoft.Owin库。我的Startup.Auth文件看起来像这样:

app.UseMicrosoftAccountAuthentication(new MicrosoftAccountAuthenticationOptions() 
{ 
    ClientId = ConfigurationManager.AppSettings["msClientId"], 
    ClientSecret = ConfigurationManager.AppSettings["msClientSecret"] 
}); 

因此,我做了以下请求我的外部登录MVC行动。

[HttpGet] 
public ActionResult ExternalLogin(string provider, string connectionId) 
{ 
    return new ChallengeResult(Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(provider), Request.Url.GetLeftPart(UriPartial.Authority) + "/Login/ExternalLoginCallback?connectionId=" + connectionId); 
} 

我的班级挑战的结果是这样的:

private class ChallengeResult : HttpUnauthorizedResult 
{ 
    public ChallengeResult(string provider, string redirectUri) 
      : this(provider, redirectUri, null) 
    { 
    } 

    public ChallengeResult(string provider, string redirectUri, string userId) 
    { 
     LoginProvider = provider; 
     RedirectUri = redirectUri; 
     UserId = userId; 
    } 

    public string LoginProvider { get; set; } 
    public string RedirectUri { get; set; } 
    public string UserId { get; set; } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var properties = new AuthenticationProperties() { RedirectUri = RedirectUri }; 
     if (UserId != null) 
     { 
      properties.Dictionary[XsrfKey] = UserId; 
     } 
     context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider); 
    } 
} 

可惜我马上我重定向到Microsoft帐户登录我只是得到:

为输入参数提供的值“REDIRECT_URI '无效。预期值为'https://login.live.com/oauth20_desktop.srf'或与此客户端应用程序注册的重定向URI匹配的URL。 &状态= 9Y9inDc4SVQTd_I4ZoLwuLPTZa5i-4NapEWzuspU9B_jz1t4aXfPY239FXx2xyI-v9xW-0fgU0kwsZVzYXOtiPhoGH9_h4aiS2Q7FlJGFNviREMLRNnfHfeYoG0m0wSgO7ZZcsJztIcgPEPdo70HkN4mCynng6bx7-nR6i7WN7DQ0SYRXrxmb2hhHDvxTWeTQAfpxKWAezJzDqdEfhoDx1VyRGC-5pCxVbhB5VF2Sb9x5TL0KWb4tXgjYSHbejDlzwMQfgcVf0SB0qRRIi2YNCEbWi6_KbGADRCN-DZ7rpVd_n695nRNQXwhQvYHTqAJr3L1dny3NvbCmYJ9SRIt6w

由于实际URL。该页面只是说出现了技术问题。我有点不知所措。

我检查了该请求发送到实际的MS提供商,它看起来像这样: (注取代成明显的安全问题)

但我检查客户端编号是正确的, redirect_uri参数与我在MS帐户设置中设置的参数相匹配。

/oauth20_authorize.srf?client_id= &范围= wl.basic & RESPONSE_TYPE =代码& REDIRECT_URI = &状态= zFGr4tzGDqMUpH7yVp0dB8JNoM_D6SFSiLa3NoKhF15O5mAkW7N51wB9vjzs1_PR7WQewUWYjLxfHY865EwN3EuEVIHp_S4m_q32s9DPG_dNsZ_wdEsOUe7FE3VY16jPS6WWeI-VnMu12RXvIqVnvH9tVXVc8QLUe8s1sZc5HFYWCtqiyejmw-MKO4MV1_DRoisn2lAO6rRhvyT-LvZBzZ20-CiFkxmVhq8DzdCnFn3Ya7sWyNzTzu1d1u_q71VBY_ot5sqUx-YEvLqcaNwDOHmFUVTpe5ynVKc8203pxqwlpNbfy8hrqxBuJWAGhiHuOIAMo5HuRv8kJJgmGOz4OQ

预先感谢。

+0

这是在开发环境?什么是您的应用程序使用的URL,你是否在主机文件中设置了一个并使用本地IIS? – DSR 2014-11-07 11:49:25

+0

嗨,是的,尝试了开发环境和本地环境。我们在重定向特定网址的网络上有一条规则。 localhost.xxx.com改为127.0.0.1。我试过一个实时网址,但都没有成功。两者都会因相同的问题而失败:-( – 2014-11-07 12:02:56

回答

0

其实,本地URL应该是somthing.something.com。如果您正确使用它,请尝试直接使用UseMicrosoftAccountAuthentication而不创建新的对象。

app.UseMicrosoftAccountAuthentication(
       clientId: ConfigurationManager.AppSettings["msClientId"], 
       clientSecret: ConfigurationManager.AppSettings["msClientSecret"]); 

而且需要正确设置重定向您的应用程序,它应该结束/登入微软的网址。

按照this文章正确。

希望这会有所帮助。

0

在我来说,因为我使用Azure的Active Directory的OpenID和我不得不删除这条线

app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); 

希望这有助于 问候