题
我们如何使用用户名和密码流在ASP.NET 5中使用持票令牌?对于我们的场景,我们希望让用户使用AJAX调用进行注册和登录,而无需使用外部登录。
为此,我们需要一个授权服务器端点。在以前的ASP.NET版本中,我们将执行以下操作,然后在ourdomain.com/TokenURL上登录。
// Configure the application for OAuth based flow
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14)
};
但是,在当前版本的ASP.NET中,上述操作无效。我们一直试图找出新的方法。例如,GitHub上的aspnet / identity示例配置了Facebook,Google和Twitter身份验证,但似乎没有配置非外部OAuth授权服务器端点,除非这样AddDefaultTokenProviders()做,在这种情况下我们想知道到底是什么URL提供者会。
研究
我们从阅读源代码中了解到,我们可以通过调用IAppBuilder.UseOAuthBearerAuthentication我们的Startup类来向HTTP管道添加“承载认证中间件” 。虽然我们仍然不确定如何设置其令牌端点,但这是一个良好的开端。这不起作用:
public void Configure(IApplicationBuilder app)
{
app.UseOAuthBearerAuthentication(options =>
{
options.MetadataAddress = "meta";
});
// if this isn't here, we just get a 404
app.Run(async context =>
{
await context.Response.WriteAsync("Hello World.");
});
}
要去ourdomain.com/meta我们刚刚收到我们的Hello World页面。
进一步的研究表明,我们也可以使用IAppBuilder.UseOAuthAuthentication扩展方法,并且它需要一个OAuthAuthenticationOptions参数。该参数具有TokenEndpoint属性。因此,虽然我们不确定我们在做什么,但我们尝试了这一点,当然这不起作用。
public void Configure(IApplicationBuilder app)
{
app.UseOAuthAuthentication("What is this?", options =>
{
options.TokenEndpoint = "/token";
options.AuthorizationEndpoint = "/oauth";
options.ClientId = "What is this?";
options.ClientSecret = "What is this?";
options.SignInScheme = "What is this?";
options.AutomaticAuthentication = true;
});
// if this isn't here, we just get a 404
app.Run(async context =>
{
await context.Response.WriteAsync("Hello World.");
});
}
换句话说,在去ourdomain.com/token,没有错误,只有我们的问候世界页面。