配置授权服务器端点
题
我们如何在使用用户名和密码流的ASP.NET 5中使用承载令牌?对于我们的方案,我们希望让用户使用AJAX调用进行注册和登录,而无需使用外部登录。
为此,我们需要一个授权服务器端点。 我们将执行以下操作,然后登录ourdomain.com/Token
URL。
// Configure the application for OAuth based flowPublicClientId = "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()
那样,在这种情况下,我们想知道提供者将是。
研究
通过阅读本文的源代码,我们了解到可以通过调用类将“承载者身份验证中间件”添加到HTTP管道IAppBuilder.UseOAuthBearerAuthentication
中Startup
。尽管我们仍不确定如何设置其令牌端点,但这是一个好的开始。这不起作用:
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
我们会收到您好的世界页面。
进一步的研究表明,我们也可以使用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
,没有错误,仅是我们的hello world页面。
回答:
好的,让我们回顾一下 中间件: ***
app.UseOAuthBearerAuthentication
/OAuthBearerAuthenticationMiddleware
:它的名字并不是很明显,但是它(并且仍然是,因为已经移植到ASP.NET Core中)负责验证由OAuth2服务器中间件发出的访问令牌。它基本上是cookie中间件的 令牌对应物 ,用于保护您的API。 (现在它能够从颁发令牌的OpenID Connect服务器自动检索签名证书)。
。
app.UseOAuthAuthorizationServer
/OAuthAuthorizationServerMiddleware
:顾名思义,它OAuthAuthorizationServerMiddleware
是OAuth2授权服务器中间件,用于创建和颁发访问令牌。 : OAuth授权服务。app.UseOAuthBearerTokens
:这个扩展实际上并不对应于中间件,只是app.UseOAuthAuthorizationServer
和app.UseOAuthBearerAuthentication
。它是ASP.NET Identity程序包的一部分,并且是配置OAuth2授权服务器和OAuth2承载中间件的一种简便方法,该中间件用于在单个调用中验证访问令牌。 。
ASP.NET Core将提供一个全新的中间件(我很自豪地说我设计了它):
app.UseOAuthAuthentication
/OAuthAuthenticationMiddleware
:此新的中间件是一个通用的OAuth2交互式客户端,其行为完全相同app.UseFacebookAuthentication
或app.UseGoogleAuthentication
几乎支持任何标准的OAuth2提供程序,包括您的OAuth2提供程序。Google,Facebook和Microsoft提供程序都已更新,可以从此新的基本中间件继承。
因此,您实际上正在寻找的中间件是 aka OAuthAuthorizationServerMiddleware
。
。
幸运的是,已经有直接替换:
(https://github.com/aspnet-
contrib/AspNet.Security.OpenIdConnect.Server)
该中间件是 随附的OAuth2授权服务器中间件的高级分支,但其目标是
(其本身基于OAuth2)。它使用相同的低级方法(通过各种通知)提供细粒度的控制,并允许您使用自己的框架(Nancy,ASP.NET Core
MVC)来为您的授权页面提供服务,就像使用OAuth2服务器中间件一样。配置起来很容易:
// Add a new middleware validating access tokens issued by the server.app.UseOAuthValidation();
// Add a new middleware issuing tokens.
app.UseOpenIdConnectServer(options =>
{
options.TokenEndpointPath = "/connect/token";
// Create your own `OpenIdConnectServerProvider` and override
// ValidateTokenRequest/HandleTokenRequest to support the resource
// owner password flow exactly like you did with the OAuth2 middleware.
options.Provider = new AuthorizationProvider();
});
// Add a new middleware validating access tokens issued by the server.services.AddAuthentication()
.AddOAuthValidation()
// Add a new middleware issuing tokens.
.AddOpenIdConnectServer(options =>
{
options.TokenEndpointPath = "/connect/token";
// Create your own `OpenIdConnectServerProvider` and override
// ValidateTokenRequest/HandleTokenRequest to support the resource
// owner password flow exactly like you did with the OAuth2 middleware.
options.Provider = new AuthorizationProvider();
});
有一个 版本,和一个同时支持.NET Desktop和.NET Core 的
版本。
请毫不犹豫地尝试给邮递员示例以了解其工作原理。
如果您仍然需要帮助,请随时与我联系。祝好运!
以上是 配置授权服务器端点 的全部内容, 来源链接: utcz.com/qa/405847.html