如何从客户端应用程序路由 JWT 令牌请求,用双斜杠形成?

Posted

技术标签:

【中文标题】如何从客户端应用程序路由 JWT 令牌请求,用双斜杠形成?【英文标题】:How to route JWT Token request from client app, formed with double slashes? 【发布时间】:2021-02-27 16:59:40 【问题描述】:

目前我们有一个 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) 令牌操作的控制器,我在使用双斜杠路由这个请求时遇到了问题。

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

【问题讨论】:

【参考方案1】:

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

例子:

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";
    

【讨论】:

以上是关于如何从客户端应用程序路由 JWT 令牌请求,用双斜杠形成?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 api 网关架构中获取 JWT 令牌

如果用于认证的JWT令牌保存在HTTP-Only cookie中,你如何从cookie中读取它,以便我可以在请求头中包含它?

身份验证后请求其他服务时如何从 JWT 令牌获取用户名?

Laravel - JWT Auth 无法从请求中解析令牌

如何在客户端上保存 JWT 令牌,在节点中使用 Hapi js。?

如何在 Nimbus JOSE + JWT 中验证令牌签名