C# 单页应用程序模板获取承载令牌函数不适用于授予类型密码无效\u客户端错误

C# 单页应用程序模板获取承载令牌函数不适用于授予类型密码无效\u客户端错误,c#,asp.net-web-api,oauth-2.0,owin,bearer-token,C#,Asp.net Web Api,Oauth 2.0,Owin,Bearer Token,我在VisualStudio2019中实现了默认的单页应用程序模板,因为我认为这是实现webApi良好授权的最简单方法。然而,当通过邮递员调用令牌函数以获取webApi的承载令牌时,返回以下错误 “错误”:“无效的\u客户端” 我打赌我可能缺少一些需要启用的配置设置,但一些广泛的谷歌搜索并没有带来任何工作结果。有人知道,要真正做到这一点还缺少什么吗 默认代码是Startup.Auth.cs static Startup() { PublicClientId = "Web";

我在VisualStudio2019中实现了默认的单页应用程序模板,因为我认为这是实现webApi良好授权的最简单方法。然而,当通过邮递员调用令牌函数以获取webApi的承载令牌时,返回以下错误

“错误”:“无效的\u客户端”

我打赌我可能缺少一些需要启用的配置设置,但一些广泛的谷歌搜索并没有带来任何工作结果。有人知道,要真正做到这一点还缺少什么吗

默认代码是Startup.Auth.cs

static Startup()
{
    PublicClientId = "Web";

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

public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

public static string PublicClientId { get; private set; }

public void ConfigureAuth(IAppBuilder app)
{
    app.bunchofotherregistrationsfordefaultapp();

    // Enable the application to use bearer tokens to authenticate users
    app.UseOAuthBearerTokens(OAuthOptions);
}

我肯定不建议使用SPA模板来设置WebApi授权,但如果您想


要完成此任务,您需要覆盖
ApplicationAuthProvider
中的2个方法(继承自
OAuthAuthorizationServerProvider
类):

public override异步任务ValidateClientAuthentication(OAuthValidateClientAuthenticationContext)
{
context.Validated();//每次都将上下文设置为有效
}
公共重写异步任务GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentials上下文)
{
context.OwinContext.Response.Headers.Add(“访问控制允许来源”,新[]{“*”});//禁用CORS策略
var identity=newclaimsidentity(context.Options.AuthenticationType);
identity.AddClaim(新声明(“email”,context.UserName));//添加要在承载令牌中加密的必需声明
context.Validated(identity);//返回有效令牌
}

您可以在这两种方法中更改验证或授予资源逻辑,以完成授权工作流。至少在没有任何附加条件的情况下,我们可以收到有效的访问令牌。

谢谢,我今天晚些时候会尝试实现这一点,但要快速跟进一个问题,邮递员要求获取承载令牌的方式是否会因此而改变,还是会保持不变?保持不变。注意,您需要手动实现验证逻辑。这意味着在我的回答中,即使您没有注册的用户令牌,也可以被授予,因为不存在验证逻辑。