带自己的身份验证服务器的 DotNetOpenAuth OpenID 流程

2024-01-25

我很难找到我必须使用的场景的答案DotNetOpenAuth以及我必须处理的特定流程。

在下图中,我控制着 MVC 站点和 API。 API 既是我的授权服务器,也是我的资源服务器。

用户名和密码流程

在用户在我的系统上创建本地帐户的情况下,这个过程相当明显,因为我正在处理用户名和密码凭据以将它们登录到站点,然后我可以将其传递到我的令牌端点,然后传递到HandleTokenRequest我的授权服务器,以便为我的客户端获取访问令牌和刷新令牌,然后开始访问资源。

OpenID 流程

我目前不知所措的流程是,如果用户决定使用他们的 Google 凭据(例如)登录我的网站。在这种情况下,我如何在 API 中从我自己的授权服务器向他们授予访问令牌和刷新令牌?

我将在对 API 令牌端点的请求中包含哪些内容?

我编写了自己的 API 客户端,它继承自WebServerClient属于该类的一部分DotNetOpenAuth图书馆。

我已经看到提供了一个用于处理令牌的接口,称为IServiceProviderTokenManager但这似乎是在 OpenID 提供程序场景中使用的,而不是在像我这样的 API 客户端实现中使用的,所以我假设我需要编写一个自定义类来在客户端存储和检索我自己的 API 令牌,但希望将其确认为出色地?

Its worth mentioning that both the web site and the API have complete access to the same security database but only the API has access to the database where any resources are held.Shows a set of flows using either local account with username and password or an openid provider


为了完整起见,我想我会用我的答案更新这个问题。

我最终做的是移动Authorize and Token端点到我的 MVC 4 应用程序中,而不是将它们放在 API 本身中。

这样,当使用登录用户调用 Authorize 端点(因此存在 ASP.NET FormsAuthentication cookie)时,当请求处理命中此代码时,可以获得授予的授权代码:

        // Consider auto-approving if safe to do so.
        if (((OAuth2AuthorizationServer)this.authorizationServer.AuthorizationServerServices).CanBeAutoApproved(pendingRequest))
        {
            var approval = this.authorizationServer.PrepareApproveAuthorizationRequest(pendingRequest, HttpContext.User.Identity.Name);
            return this.authorizationServer.Channel.PrepareResponse(approval).AsActionResult();
        }

获得授权代码后,您可以使用以下命令调用令牌端点WebServerClient实例并调用它的RequestUserAuthorization method.

当此回调时,您可以调用ProcessUserAuthorization方法将返回一个IAuthorizationState包含您的访问令牌和刷新令牌的对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带自己的身份验证服务器的 DotNetOpenAuth OpenID 流程 的相关文章

随机推荐