Microsoft.Owin.Security.OAuth.OAuthAuthorizationServerProvider-尝试从邮递员生成令牌时,clientId和clientSecret变为null

问题描述 投票:1回答:1

我正在为我的asp.net Web api 2应用程序使用OWIN安全,这是我的身份验证启动类设置。

 public void ConfigureOAuth(IAppBuilder app)
    {

        var oAuthServerOptions = new OAuthAuthorizationServerOptions
        {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString("/token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
            Provider = new CustomAuthorizationServerProvider()
        };

        // Token Generation
        app.UseOAuthAuthorizationServer(oAuthServerOptions);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }

这是CustomAuthorizationServerProvider类的实现,

public class CustomAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        context.TryGetFormCredentials(out var clientId, out var clientSecret);

        if (clientId == "987459827985" && clientSecret == "lkfjldsfjkld")
        {
            context.Validated(clientId);
        }

        return base.ValidateClientAuthentication(context);
    }

    public override Task GrantClientCredentials(OAuthGrantClientCredentialsContext context)
    {
        var oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
        oAuthIdentity.AddClaim(new Claim(ClaimTypes.Name, "TestClient"));
        var ticket = new AuthenticationTicket(oAuthIdentity, new AuthenticationProperties());
        context.Validated(ticket);
        return base.GrantClientCredentials(context);
    }
}

现在,当尝试使用端点http://localhost:8080/token生成令牌时,我的clientId和clientSecret都为NULL,因此我得到了"error": "invalid_client"。我在这里想念的是什么?

enter image description here

enter image description here

编辑:编辑

[当我使用raw作为正文时,我可以看到令牌生成正在起作用,并且客户端和密钥都具有价值。为什么它对form-data不起作用?

enter image description here

c# asp.net-web-api2 owin
1个回答
1
投票

查看邮递员文档:Sending API requests

最重要的是:

网站表单通常将数据作为多部分/表单数据发送到API。您可以使用表单数据“正文”选项卡在Postman中复制此内容。表单数据使您可以发送键值对,并指定内容类型。

通过网络快速搜索,需要一种特殊的API绑定multipart/form-data处理方式>

How to set up a Web API controller for multipart/form-data

There is even a plugin for that

内容类型很重要。

© www.soinside.com 2019 - 2024. All rights reserved.