如何设置 katana-project 以允许 json 格式的令牌请求?

Posted

技术标签:

【中文标题】如何设置 katana-project 以允许 json 格式的令牌请求?【英文标题】:How do you set katana-project to allow token requests in json format? 【发布时间】:2013-10-28 21:13:11 【问题描述】:

当我在 asp.net webapi 2 中设置 OAuth 授权服务器时,如何将令牌端点设置为接受 json 而不是表单编码的帖子?

使用示例http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api

我尝试发送应用程序/json 与


"grant_type":"password",
"username":"Alice",
"password":"password123"

我收到回复 400 错误请求


  "error" : "unsupported_grant_type"

作为 application/x-www-form-urlencoded 的内容类型 和grant_type=password&username=Alice&password=password123 的正文 按预期工作。

200 正常


  "access_token" : "08cQ33ZG728AqBcj1PBsRSs4iBPc02lLCZfpaRRWLx2mH_wpQzMwGDKS7r7VgJiKUjUFaq6Xv0uguINoiB_evVbVOtvyWaqAYvc0HRjlgrbj12uQqFbUB7bgH-jiyfhumkwuTSTVHfKUhBjCuD_pbyxEbu2K5WSJpUVge_SGxnb-htm4ZNf1qKDmpEnP9IpZVeJa-KnV0m0gEmP04slMW_JrO390LzCNvXZwVk1yMNuvDakk8tWX7Y6WkFoh7vtW6xfhw3QMbmnvS6px70yMWcTksRNG2bdmi4SenhuRTJx8IsCMnz-4Co7KiCNJGF7KLeU4WzE-LSqXv3mQ30CIQ7faXoMn53p83wZ1NoXYyhsNrQD4POUns_Isb_Pax5gvpZEdyo8zr1r7wb0dS7UXvJb0PWzLHc57Pg3u0kmcizQ",
  "token_type" : "bearer",
  "expires_in" : 1209599,
  "userName" : "Alice",
  ".issued" : "Wed, 30 Oct 2013 15:16:33 GMT",
  ".expires" : "Wed, 13 Nov 2013 15:16:33 GMT"

【问题讨论】:

通过在请求的头部添加“Content-Type: application/json”? 这是我首先尝试的。我再试一次,也许我打错了。 为此损失了 3 个小时。谷歌搜索“unsupported_grant_type”将我带到您的帖子以揭示问题。 【参考方案1】:

基于OAuthAuthorizationServerHandler 的当前实现,您不能。

private async Task InvokeTokenEndpointAsync()

     DateTimeOffset currentUtc = Options.SystemClock.UtcNow;
     // remove milliseconds in case they don't round-trip
     currentUtc = currentUtc.Subtract(TimeSpan.FromMilliseconds(currentUtc.Millisecond));

     IFormCollection form = await Request.ReadFormAsync();
     var clientContext = new OAuthValidateClientAuthenticationContext(
                Context,
                Options,
                form);

     await Options.Provider.ValidateClientAuthentication(clientContext);

     if (!clientContext.IsValidated)
     
          _logger.WriteError("clientID is not valid.");
          if (!clientContext.HasError)
          
               clientContext.SetError(Constants.Errors.InvalidClient);
          
          await SendErrorAsJsonAsync(clientContext);
          return;
      

      var tokenEndpointRequest = new TokenEndpointRequest(form);

因此,为了尝试此操作,您需要提供自己的 OAuthAuthorizationServerMiddleware 实现,它重载 CreateHandler,以便您可以提供自己的 AuthenticationHandler<OAuthAuthorizationServerOptions> 实现

【讨论】:

关于如何连接我们自己的 OAuthAuthorizationServerMiddleware 实现的更多信息?我认为是app.UseOAuthBearerAuthentication 以某种方式?

以上是关于如何设置 katana-project 以允许 json 格式的令牌请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 spring-boot 以允许从外部 IP 地址访问网络服务器

如何设置 ASP.NET CORS OPTION 以允许应用程序/json

如何在 C 中取消设置变量以允许稍后使用具有不同数据类型的相同名称?

如何在 Sql Server 上设置安全性以允许 WCF 服务访问?

亚马逊红移,sqlworkbench/j

使用导航架构时如何设置“允许重新排序”?