如何使用Visual Studio Code为.NET Core配置ADFS身份认证?请提供示例及相关链接
没问题,我来一步步教你怎么在VS Code里给.NET Core项目配置ADFS身份认证,顺便给你一些实用的示例和参考思路~
一、准备工作
在开始配置前,你得先搞定这几件事:
- 已经搭建并运行的ADFS服务器,并且知道它的元数据地址(一般是
https://your-adfs-server/FederationMetadata/2007-06/FederationMetadata.xml) - VS Code里安装了C#扩展,方便编写和调试.NET Core代码
- 本地安装了对应版本的.NET Core SDK
- 在ADFS管理控制台里注册好你的应用程序(也就是添加「依赖方信任」,设置好应用标识符、回调地址这些关键信息)
二、VS Code中配置.NET Core项目的ADFS认证步骤
1. 创建或打开项目
如果还没有项目,打开VS Code的终端,运行以下命令创建一个MVC项目:
dotnet new webapp -n AdfsDemo cd AdfsDemo code .
如果已有项目,直接在VS Code中打开即可。
2. 安装必要的NuGet包
在终端里运行命令,添加支持ADFS的Ws-Federation认证包:
dotnet add package Microsoft.AspNetCore.Authentication.WsFederation
3. 配置应用设置
打开appsettings.json,添加ADFS相关的配置节点:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "AdfsSettings": { "MetadataAddress": "https://your-adfs-server/FederationMetadata/2007-06/FederationMetadata.xml", "Wtrealm": "urn:your-app-realm", // 替换成你在ADFS里注册的应用标识符 "Wreply": "https://localhost:5001/signin-wsfed" // 替换成ADFS里配置的回调地址 } }
4. 配置认证中间件
打开Program.cs(.NET 6及以上版本是顶级语句格式),添加认证服务和中间件:
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.WsFederation; var builder = WebApplication.CreateBuilder(args); // 读取ADFS配置 var adfsSettings = builder.Configuration.GetSection("AdfsSettings"); // 配置认证方案:Cookie用来保存登录状态,WsFederation用来跳转到ADFS认证 builder.Services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme; }) .AddCookie() // 添加Cookie认证 .AddWsFederation(options => { options.MetadataAddress = adfsSettings["MetadataAddress"]; options.Wtrealm = adfsSettings["Wtrealm"]; options.Wreply = adfsSettings["Wreply"]; }); // 添加MVC控制器和视图支持 builder.Services.AddControllersWithViews(); var app = builder.Build(); // 启用HTTPS重定向(ADFS一般要求HTTPS) if (!app.Environment.IsDevelopment()) { app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); // 一定要先启用认证,再启用授权 app.UseAuthentication(); app.UseAuthorization(); // 配置路由 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
5. 保护需要认证的页面/控制器
在需要用户登录才能访问的控制器或Action上添加[Authorize]特性,比如新建一个SecureController:
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace AdfsDemo.Controllers; [Authorize] public class SecureController : Controller { public IActionResult Index() { // 这里可以获取登录用户的信息 ViewBag.UserName = User.Identity.Name; return View(); } }
然后在Views/Secure/Index.cshtml里展示用户信息:
<h1>欢迎访问安全页面</h1> <p>当前登录用户:@ViewBag.UserName</p>
三、演示示例思路
你可以基于上面的配置做一个简单的演示:
- 在首页(
Home/Index)添加一个按钮,链接到Secure/Index - 当用户点击按钮时,因为
SecureController有[Authorize]特性,系统会自动跳转到ADFS的登录页面 - 用户输入ADFS的账号密码后,会回调到你的应用,自动登录并显示安全页面的用户信息
- 还可以添加退出功能,通过
SignOutAsync方法清除Cookie并跳转到ADFS的退出地址
四、参考方向
- 可以查看.NET官方文档中关于「WsFederation Authentication」的详细说明,了解更多配置选项(比如自定义用户信息映射、认证事件处理等)
- 参考ADFS官方文档,学习如何正确注册依赖方信任、配置声明规则等服务器端操作
内容的提问来源于stack exchange,提问作者user9224675
相关产品推荐
相关产品推荐

