单页应用程序模板获取不记名令牌功能不适用于 grant_type 密码 invalid_client 错误

single page application Template get bearer token function not working for grant_type password invalid_client error

我在 Visual studio 2019 年实现了默认的单页应用程序模板,因为我认为这是为 webApi 实现良好授权的最简单方法。然而,令牌函数,为 webApi returns 获取不记名令牌,在通过邮递员调用时出现以下错误。

"error": "Invalid_client"

我打赌我可能遗漏了一些我需要启用的配置设置,但是一些广泛的 google 搜索没有得出任何有效结果。任何人都知道真正使这项工作还缺少什么吗?

后面的默认代码是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授权,但是如果你想...


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

public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
    context.Validated(); // Set up your context to be valid every time
}

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); // Disable CORS policies
    var identity = new ClaimsIdentity(context.Options.AuthenticationType);

    identity.AddClaim(new Claim("email", context.UserName)); // Add required claims you want to encrypt in bearer token

    context.Validated(identity); // Return valid token
}

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