.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
相关产品推荐
相关产品推荐

