ADAL.Net迁移至MSAL.Net是否需修改SPN及相关配置?
ADAL.NET 迁移至 MSAL.NET 相关问题解答
针对你提到的两个核心问题,直接给出结论和操作指引:
1. 门户配置与代码配置调整说明
Azure 门户应用注册侧
你当前已经在使用 Azure AD v2.0 认证端点,不需要对现有应用注册做大规模重构调整,仅需核对2项配置即可:
- 检查「API权限」页配置:确认业务需要调用的所有API(如Microsoft Graph、其他内部受保护API)的权限已正确添加,需要管理员同意的权限已经完成同意流程,MSAL在v2端点下的权限校验逻辑和你之前用ADAL调用v2端点的逻辑完全一致,没有强制变更要求。
- 检查认证平台配置:核对Web平台下配置的重定向URI和实际业务的回调地址一致;如果之前为了适配ADAL开启了隐式流授权(即ID令牌、访问令牌的隐式授予开关),迁移后如果用的是.Net Core Web应用默认推荐的授权码流,可以关闭隐式流开关降低安全风险,这个属于优化项,不是迁移必须修改的配置。
代码侧配置(必须调整)
- 首先是NuGet包替换:卸载旧的ADAL包
Microsoft.IdentityModel.Clients.ActiveDirectory,Web场景直接安装Microsoft.Identity.Web、Microsoft.Identity.Web.UI两个包即可,不需要单独安装底层MSAL核心库,封装好的扩展方法对.Net Core 6的适配更完善。 appsettings.json配置调整:原有配置里存储的客户端ID、租户ID、客户端密钥/证书值本身不需要修改,但要对齐MSAL的配置格式,注意权威地址(Authority)要去掉旧的/oauth2路径,标准格式参考如下:
{ "AzureAd": { "Instance": "https://login.microsoftonline.com/", "Domain": "你的租户域名,比如contoso.onmicrosoft.com", "TenantId": "你的租户ID", "ClientId": "你的应用客户端ID", "ClientSecret": "你的客户端密钥(如果用证书认证替换为对应证书配置)", "CallbackPath": "/signin-oidc", "SignedOutCallbackPath": "/signout-callback-oidc" } }
- 认证服务注册代码调整:不管你是用独立的
Startup.cs文件,还是.Net 6顶级语句的Program.cs,都要把原来ADAL手写的认证、令牌获取逻辑全部替换为官方扩展方法,示例代码如下:
// Program.cs 示例 builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration, "AzureAd") .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); // 生产环境建议换成分布式缓存,比如Redis、数据库 builder.Services.AddControllersWithViews().AddMicrosoftIdentityUI();
- 业务代码替换:所有原来调用ADAL的
AuthenticationContext.AcquireTokenXXX系列方法的位置,全部替换为MSAL的令牌获取接口(用Id.Web的话直接注入ITokenAcquisition服务拿令牌即可,不需要手动实例化MSAL客户端)。注意ADAL和MSAL的令牌缓存格式不兼容,迁移上线后用户需要重新登录一次获取新的令牌,旧缓存里的ADAL令牌无法复用。
2. 服务主体(SPN)参数调整说明
迁移过程不需要对现有服务主体的任何参数做调整。
服务主体是Azure AD中应用实例的身份标识,其核心属性(客户端ID、租户ID、密钥/证书凭据、对象ID)和应用侧使用什么SDK做认证没有关系,迁移SDK只是应用侧的认证实现逻辑切换,不会改变应用在Azure AD中的身份。之前给这个服务主体配置的所有API权限、Azure资源RBAC角色、访问策略(如Key Vault访问策略、存储账号ACL等)全部可以正常生效,不需要重新创建服务主体,也不需要修改任何现有SPN参数。
唯一例外:如果你之前的SPN权限是分配给已经退役的旧版Azure AD Graph(即Windows Azure Active Directory API)的,需要把对应权限迁移到Microsoft Graph,但这个是Azure AD Graph退役的强制要求,和本次ADAL迁MSAL的动作无关。
内容的提问来源于stack exchange,提问作者Mohit Jain
相关产品推荐
相关产品推荐

