asp.net-mvc - 带自己的身份验证服务器的 DotNetOpenAuth OpenID 流程

标签 asp.net-mvc oauth asp.net-web-api openid dotnetopenauth

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

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

用户名和密码流程

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

OpenID 流程

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

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

我编写了自己的 API 客户端,它继承自 WebServerClient 类,该类是 DotNetOpenAuth 库的一部分。

我发现有一个名为 IServiceProviderTokenManager 的用于处理 token 的接口(interface),但它似乎用于 OpenID 提供程序场景,而不是像我这样的 API 客户端实现,所以我假设我需要编写一个自定义类来在客户端存储和检索我自己的 API token ,但也希望确认这一点?

值得一提的是,网站和 API 都可以完全访问同一个安全数据库,但只有 API 可以访问保存任何资源的数据库。 Shows a set of flows using either local account with username and password or an openid provider

最佳答案

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

我最终所做的是将 AuthorizeToken 端点移至我的 MVC 4 应用程序中,而不是将它们放在 API 本身中。

这样,当使用登录用户调用授权端点时(因此存在 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 方法来调用 token 端点。

当此回调返回时,您可以调用 ProcessUserAuthorization 方法,该方法将返回一个带有您的访问 token 和刷新 token 的 IAuthorizationState 对象。

关于asp.net-mvc - 带自己的身份验证服务器的 DotNetOpenAuth OpenID 流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855131/

相关文章:

c# - ASP.NET MVC : What is the correct way to redirect to pages/actions in MVC?

swift - Twitter API 返回错误 401(使用 OAuthSwift)

angularjs - 应用程序使用 OAuth 的最佳方式

next.js - Supabase 与 Next.js 13 应用程序路由器 OAuth 未登录

jquery - 传递凭据不起作用

asp.net-mvc - 如何在 mvc 中通过重定向发出 POST 请求?

c# - 传入字典的模型项是 '' 类型的,但是这个字典需要一个 '' 类型的模型项

asp.net - ASP.MVC - View 数据

javascript - 如何使用 Angular 和 webapi 或 mvc 处理测验应用程序中的安全性?

c# - .NET Web Api 2.1 中 Ninject 绑定(bind)的无参数构造函数错误