【发布时间】:2017-08-01 09:20:27
【问题描述】:
我目前有一个网站,我正在尝试实现 OAuth 服务器框架。该网站目前是 Web Forms(不是 MVC)和 Web API 2 的组合。就我试图做的事情而言,我们无法更改系统的整体架构。
到目前为止,我通过 Web API 使用 OAuth 来验证客户端、生成访问令牌和处理刷新令牌。
我尝试实现的最后一个部分是授权代码工作流程。这将允许我们授予对应用程序的访问权限,以便集成工具可以访问我们的 API,而无需在本地存储用户凭据。
我对它应该如何运作的理解如下:
- 用户被定向到我在 Startup.Auth 文件中定义的 AuthorizeEndpointPath
- 用户要么看到一个登录页面(如果他们还没有网站的身份验证 cookie),要么他们看到一个特殊页面,他们必须在其中授予访问帐户的权限(类似于 Google 所拥有的)李>
- 一旦用户单击“授予”按钮,OWIN 中间件将处理请求,并将它们重定向回请求访问的原始客户端 URL
但是,在我完成所有配置之后,每当我直接访问 AuthorizeEndpointPath 时,“授予访问权限”页面实际上并没有显示出来。
我确保了以下配置,但没有太多关于正确配置的文档。
var oAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/api/token"),
AuthorizeEndpointPath = new PathString("/LoginAuthorize.aspx"),
//AuthorizeEndpointPath = new PathString("/api/authorize"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(10),
Provider = new ApiAuthorizationServerProvider(),
RefreshTokenProvider = new ApiRefreshTokenProvider(),
AuthorizationCodeProvider = new ApiAuthoirzationCodeProvider()
};
目前“AuthorizeEndpointPath”属性映射到一个实际页面,我要求用户确认,但该页面根本没有显示
通过调试,我可以看到框架在授权页面加载之前就命中了以下方法
ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
我试图重载该方法,但发生了两件事之一。如果我调用 context.Validated();,用户会立即被重定向,而不会显示授权页面。如果不“验证”重定向 URI,则会显示一个空白页面,指示“invalid_request”。
所以最大的问题是如何让 OWIN 显示我的自定义授权页面?
当最终显示授权页面时,当用户单击“授予”按钮时,我需要做什么。是否需要设置任何配置,或者需要对 OWIN 进行任何调用?
另外,如何确保用户在显示该页面之前进行身份验证?如果他们没有登录,我是否只是让我的代码将用户重定向到登录页面?如果是这样,OWIN 将如何处理真正的重定向回客户端(如果用户在登录后会被重定向到授权页面)?
最后,一旦这一切都正确配置,我是否仍然能够支持当前的 OAuth 工作流程,即允许客户端手动传递其“令牌”API 的凭据?我问的原因是因为我们也有拥有自己登录屏幕的移动应用程序,并且将使用 OAuth 进行连接(除了其他基于 Web 的客户端)。
【问题讨论】: