首页 > 解决方案 > 如何从客户端应用程序路由 JWT 令牌请求,用双斜杠形成?

问题描述

目前我们有一个 WPF 客户端应用程序,它使用 OAuth 向 ASP MVC 应用程序请求承载令牌。

此配置在定义端点时在启动时进行:

OAuthOptions = new OAuthAuthorizationServerOptions
{
   TokenEndpointPath = new PathString("/Token"),
   Provider = new ApplicationOAuthProvider(PublicClientId),
   AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
   AllowInsecureHttp = true
};

客户端 WPF 应用程序通过向 [resourceBaseAddress/Token] 发出 POST 请求来请求令牌。我将假设的请求内容与我的问题无关。

问题是我的“resourceBaseAddress”包含一个尾部正斜杠,因此请求以http://contoso.com//Token之类的方式形成(注意双斜杠)。它目前有效。

但是现在我们正在迁移到 ASP.NET Core,因此我不得不添加一个带有 (Jwt) 令牌操作的控制器,我在使用双正斜杠路由这个请求时遇到了问题。

由于我无法更改客户端应用程序上的代码,如何正确配置此控制器方法?

标签: asp.net-corejwtbearer-token

解决方案


重写请求路径的中间件怎么样?你尝试过这样的事情吗?

例子:

app.Use(async (context, next) =>
{
    var url = context.Request.Path.Value;

    if (url.EndsWith("//Token"))
    {
        // rewrite and continue processing
        context.Request.Path = "/Token";
    }

    await next();
});

app.UseRouting();

还有一个像这样的简单控制器:

[Route("[controller]")]
public class TokenController : ControllerBase
{
    [HttpPost]
    public string Post()
    {
        return "Token";
    }
}

推荐阅读