ASP.NET核心OAuth身份验证,必须提供“ClientSecret”选项

bn31dyow  于 2023-03-28  发布在  .NET
关注(0)|答案(1)|浏览(188)

我使用OAuth2认证与我们的自定义认证服务器。
我的Postman auth params工作正常吗

下面是我使用OAuth扩展Microsoft.AspNetCore.Authentication.OAuth的C#代码

builder.Services
    .AddAuthentication(options =>
    {
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    })
    .AddCookie(opt =>
    {
        opt.ExpireTimeSpan = TimeSpan.FromMinutes(20);
    })
    .AddOAuth("oauth", opt =>
    {
        opt.AuthorizationEndpoint = "https://custom.com/oauth/authorize";
        opt.TokenEndpoint = "https://custom.com/oauth/token";
        opt.ClientId = "C2561615-783D-47C7-A5DB-DD94FE51C005";
        opt.Scope.Add("full");
        opt.CallbackPath = "/token_grant";
        opt.UsePkce = true;
    });

它上升异常

System.ArgumentException: The 'ClientSecret' option must be provided. (Parameter 'ClientSecret')

但是为什么呢?ClientSecret不是Postman的必要参数!

vhipe2zx

vhipe2zx1#

您应该使用AddOpenIDConnect处理程序来启动它。使用它,您可以提供一个secret。
客户端id和secret包含在对后台的请求中,以使用授权码请求令牌。
来自here的示例代码:

services.AddAuthentication(options => {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCookie(options => {
            options.LoginPath = "/Account/Login/";
        })
        .AddOpenIdConnect(options =>
            {
                options.ClientId = Configuration["oidc:clientid"];
                options.ClientSecret = Configuration["oidc:clientsecret"];
                options.Authority = String.Format("https://{0}.onelogin.com/oidc/2", Configuration["oidc:region"]);

                options.ResponseType = "code";
                options.GetClaimsFromUserInfoEndpoint = true;
            }
        );

相关问题