使用客户的IdP实施OAuth2身份验证

时间:2019-03-04 12:48:18

标签: oauth-2.0 visual-studio-2017 owin

我有WebForms应用程序。用户可以使用登录名/密码以及标准的OWIN提供程序(Facebook,Twitter等)进行连接。

但是现在我要求使用现有客户的服务器实施另一种方法-OAuth2。

如何最简单地做到这一点?

假设我们有一个来自标准Visual Studio模板的具有身份的新应用程序。

我知道OWIN中还有许多其他提供程序-OAuth,OpenIdConnect等。但是我没有实现纯OAuth2关系的运气。

尝试过OpenIdConnect

new OpenIdConnectAuthenticationOptions
{
    ClientId = "XXX",
    ClientSecret = "YYY",

    Configuration = new OpenIdConnectConfiguration
    {
        AuthorizationEndpoint = "https://example.com/oauth/authorize",
        TokenEndpoint = "https://example.com/oauth/token"
    }
}

它似乎正在工作。创建请求,用户在外部IdP上输入凭据,然后返回代码。

但是如何将其附加到标准流程? ReturnUrl应该在哪里处理code并验证用户身份?似乎没有标准方法可以像其他提供程序一样挑战重定向到\ Account \ RegisterExternalLogin.aspx。

我需要达到标准流量

        var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
        var loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo();
        if (loginInfo == null)
        {
            RedirectOnFail();
            return;
        }
        var user = manager.Find(loginInfo.Login);
        if (user != null)
        {
            signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);
            IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
        }

我缺少什么?

还是我必须使用Microsoft.Owin.Security.OAuth名称空间中的任何提供程序?

我需要一些完整的工作示例。我不想实现整个沟通。我希望任何OWIN提供者都可以解决这个问题。

0 个答案:

没有答案