You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6调用SAML IDP遇400错误(strict-origin-when-cross-origin)

SAML身份认证400错误排查求助

我尝试使用StubIDP作为SAML身份提供商完成认证,项目采用AspNetSaml NuGet包。已经花费数小时排查仍未找到问题,希望有人帮忙找出疏漏。

返回的错误信息:

Status 400
Bad Request
Version HTTP/2
Transferred 5.16 kB (0 B size)
Referrer Policy strict-origin-when-cross-origin

Program.cs配置:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCors(options =>
{
    options.AddPolicy("Policy1",
        policy =>
        {
            policy.WithOrigins("https://stubidp.sustainsys.com/");
        });
});

Login.cshtml.cs代码:

using MainApp.Models;
using Saml;

namespace MainApp.Pages.Account;

[AllowAnonymous]
public class LoginModel : PageModel
{
    public IActionResult OnGet()
    {
        var context = HttpContext;
        var samlEndpoint = "https://stubidp.sustainsys.com/e64887c8-c492-49e3-94d5-08d4471ee265/";

        var request = new AuthRequest(
            "https://localhost:11123", //TODO: put your app's "entity ID" here
            "https://localhost:11123/Account/Consume" //TODO: put Assertion Consumer URL (where the provider should redirect users after authenticating)
        );

        //now send the user to the SAML provider
        return Redirect(request.GetRedirectUrl(samlEndpoint));
    }
}

处理IDP返回POST请求的ConsumeModel代码:

using MainApp.Models;
using Microsoft.AspNetCore.Cors;
using Saml;

namespace MainApp.Pages.Account;

[AllowAnonymous]
public class ConsumeModel : PageModel
{
    private readonly IUserManager _userManager;
    //private readonly IRoleRepository _roleRepo;
    private readonly ILogger<LoginModel> _logger;

    public ConsumeModel(IUserManager userManager, ILogger<LoginModel> logger)
    {
        _userManager = userManager;
        _logger = logger;
    }

    public void OnGet(string SAMLart)
    {
    }

    [EnableCors("Policy1")]
    public void OnPost()
    {
        // 1. TODO: specify the certificate that your SAML provider gave you
        string samlCertificate = @"-----BEGIN CERTIFICATE-----";
MIICFTCCAYKgAwIBAgIQzfcJCkM1YahDtRGYsLphrDAJBgUrDgMCHQUAMCExHzAd
BgNVBAMTFnN0dWJpZHAuc3VzdGF etc...
-----END CERTIFICATE-----";

        // 2. Let's read the data - SAML providers usually POST it into the "SAMLResponse" var
        Saml.Response samlResponse = new Response(samlCertificate, Request.Form["SAMLResponse"]);

        // 3. We're done!

        var username = "";

        if (samlResponse.IsValid())
            username = samlResponse.GetNameID();

IDP的SAML请求数据:

IDP的SAML请求数据

内容的提问来源于stack exchange,提问作者Robb Sadler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:35:31