【发布时间】:2015-02-26 18:27:00
【问题描述】:
我正在尝试创建一个启用 OAuth 的简单概念验证应用程序,但我卡在了授权代码实现上。我阅读的所有地方似乎都以一种或另一种方式进行,从未真正使用过授权代码流。我一直在使用以下资源获取信息:
- https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-31
- https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified
- http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server
我已经使用自定义 OAuthAuthorizationServerProvider 设置了 web api 和 owin,以接受刷新令牌的密码授予类型以及将刷新令牌交换为访问令牌的能力。这运行良好,但我想设置一个场景,将浏览器重定向到服务器以授权并使用授权代码重定向回客户端。然后我希望客户端将授权代码发送到令牌端点以获取刷新令牌
在 Web 服务器应用程序下的第二个链接中,我试图让我的 Web api 应用程序从http://127.0.0.1/auth?response_type=code&client_id=123&redirect_uri=http://validredirect.com&scope=access 之类的请求中显示授权代码,但我一直收到 404。
我的 owin 配置如下:
var databaseContext = new AdnsfContext();
WebApp.Start(
new StartOptions("http://127.0.0.1:7000"),
appBuilder =>
{
var httpConfig = new HttpConfiguration();
httpConfig.MapHttpAttributeRoutes();
httpConfig.SuppressDefaultHostAuthentication();
httpConfig.Filters.Add(new HostAuthenticationFilter("Bearer"));
appBuilder
.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
ApplicationCanDisplayErrors = true,
AuthorizeEndpointPath = new PathString("/auth"),
TokenEndpointPath = new PathString("/token"),
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(1),
Provider = new AuthServerProvider(),
AuthorizationCodeProvider = new AuthorizationCodeProvider(),
RefreshTokenProvider = new RefreshTokenProvider(),
})
.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AuthenticationType = "Bearer",
})
.UseCors(CorsOptions.AllowAll)
.UseWebApi(httpConfig);
});
我为启用授权端点添加的部分是身份验证服务器选项的属性:
AuthorizeEndpointPath = new PathString("/auth"),
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1),
AuthorizationCodeProvider = new AuthorizationCodeProvider(),
我的 AuthorizationCodeProvider 实现中的覆盖抛出未实现的异常,但它目前甚至没有遇到代码中设置的任何断点。需要注意的一件事是,当我使用邮递员访问 auth 端点时,我会返回 HTTPAPI/2.0 的服务器标头,这与该端点处根本没有出现任何东西不同,这意味着我必须发送请求错误地。谁能看到我的设置有问题?在此先感谢,我知道这显然是我对 OWIN 和 OAuth 的理解失败。
【问题讨论】:
标签: c# asp.net-web-api oauth-2.0 owin