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

.NET 8 Razor Pages应用基于Azure AD SAML的SSO代码实现求助

.NET 8 Razor Pages 集成 Azure AD SAML 单点登录实现

1. 安装依赖包

在项目中安装SAML认证所需的NuGet包:

Install-Package Microsoft.AspNetCore.Authentication.Saml2

2. 配置应用设置

在appsettings.json中添加Azure AD的SAML配置项(替换占位符为你的实际信息):

"AzureAdSaml": {
  "MetadataAddress": "https://login.microsoftonline.com/{你的租户ID}/federationmetadata/2007-06/federationmetadata.xml",
  "EntityId": "{你的应用注册实体ID}",
  "CallbackPath": "/signin-saml"
}

3. 配置认证中间件(Program.cs)

修改Program.cs,添加SAML认证和全局授权配置,确保中间件顺序正确:

var builder = WebApplication.CreateBuilder(args);

// 添加Razor Pages服务
builder.Services.AddRazorPages();

// 配置SAML认证
builder.Services.AddAuthentication()
    .AddSaml2(options =>
    {
        var samlConfig = builder.Configuration.GetSection("AzureAdSaml");
        options.MetadataAddress = samlConfig["MetadataAddress"];
        options.EntityId = samlConfig["EntityId"];
        options.CallbackPath = samlConfig["CallbackPath"];

        // 可选:自定义登录成功后的逻辑
        options.Events.OnTicketReceived = context =>
        {
            // 这里可按需处理用户信息,比如记录登录日志
            return Task.CompletedTask;
        };
    });

// 设置全局授权策略,未认证请求自动跳转SSO登录页
builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

// 启用认证和授权中间件(顺序不可调换)
app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();

app.Run();

4. 获取并显示用户登录名

在任意Razor Page的后台代码或前端页面中,直接通过User.Identity.Name获取登录名:

后台代码示例(Index.cshtml.cs)

using Microsoft.AspNetCore.Mvc.RazorPages;

namespace YourProject.Pages;

public class IndexModel : PageModel
{
    public string UserLoginName { get; set; }

    public void OnGet()
    {
        UserLoginName = User.Identity.Name;
    }
}

前端页面示例(Index.cshtml)

<h2>欢迎登录,@Model.UserLoginName</h2>
<!-- 也可直接在页面中直接调用 -->
<p>当前登录用户:@User.Identity.Name</p>

关键注意点

  • 确保Azure AD应用注册中配置的**回复URL(Reply URL)**与CallbackPath完全匹配,格式为https://你的域名/signin-saml
  • 若需要获取更多用户属性(如邮箱、姓名),可从User.Claims集合中提取,例如:
    var userEmail = User.Claims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress")?.Value;
    

内容的提问来源于stack exchange,提问作者rahul singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:34:56