配置授权服务器端点

我们如何在使用用户名和密码流的ASP.NET 5中使用承载令牌?对于我们的方案,我们希望让用户使用AJAX调用进行注册和登录,而无需使用外部登录。

为此,我们需要一个授权服务器端点。 我们将执行以下操作,然后登录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()那样,在这种情况下,我们想知道提供者将是。

研究

通过阅读本文的源代码,我们了解到可以通过调用类将“承载者身份验证中间件”添加到HTTP管道IAppBuilder.UseOAuthBearerAuthenticationStartup。尽管我们仍不确定如何设置其令牌端点,但这是一个好的开始。这不起作用:

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.UseOAuthAuthorizationServerapp.UseOAuthBearerAuthentication。它是ASP.NET Identity程序包的一部分,并且是配置OAuth2授权服务器和OAuth2承载中间件的一种简便方法,该中间件用于在单个调用中验证访问令牌。 。

ASP.NET Core将提供一个全新的中间件(我很自豪地说我设计了它):

  • app.UseOAuthAuthentication/ OAuthAuthenticationMiddleware:此新的中间件是一个通用的OAuth2交互式客户端,其行为完全相同app.UseFacebookAuthenticationapp.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

回到顶部