.NET Core离线场景下能否脱离Azure AD使用MSAL获取令牌?
解决方案
MSAL限制说明
MSAL(Microsoft Authentication Library)是专为Azure AD/Microsoft Entra ID设计的身份验证库,核心逻辑绑定Azure生态服务,无法规避生产环境对客户端ID、租户ID的要求,完全不适合内网离线的自定义身份服务器场景。
推荐替代方案
1. OpenIddict
完全开源的.NET原生身份认证框架,完美支持OAuth2.0和OpenID Connect协议,无商用限制,适配.NET Core后端与Angular前端,适合内网离线部署:
- .NET Core后端:可直接集成OpenIddict作为自定义身份服务器,实现令牌颁发、验证、缓存等核心功能,所有配置自主可控,无需依赖外部云服务。
- Angular前端:搭配通用OIDC客户端库(如
angular-auth-oidc-client),直接对接OpenIddict服务器,实现前端身份认证、令牌管理逻辑。
2. Keycloak
红帽旗下的开源身份管理平台,跨平台支持OAuth2.0、OIDC等多种协议,自带可视化管理界面,可快速搭建内网身份服务:
- 支持用户管理、角色权限控制、令牌生命周期管理等完整功能,部署简单,无需复杂开发。
- .NET Core后端可通过OpenID Connect中间件对接Keycloak,Angular前端使用通用OIDC库即可完成身份集成。
简单集成示例(以OpenIddict为例)
.NET Core后端核心配置
在Program.cs中注册OpenIddict服务:
builder.Services.AddOpenIddict() .AddCore(options => { options.UseEntityFrameworkCore() .UseDbContext<ApplicationDbContext>(); }) .AddServer(options => { options.SetAuthorizationEndpointUris("/connect/authorize") .SetTokenEndpointUris("/connect/token") .AllowAuthorizationCodeFlow() .AllowPasswordFlow() .AddEphemeralEncryptionKey() .AddEphemeralSigningKey() .DisableAccessTokenEncryption(); }) .AddValidation(options => { options.UseLocalServer(); options.UseAspNetCore(); });
Angular前端核心配置
使用angular-auth-oidc-client配置自定义身份服务器:
export const authConfig: AuthConfig = { authority: 'https://your-internal-identity-server', redirectUrl: window.location.origin + '/callback', postLogoutRedirectUri: window.location.origin, clientId: 'your-angular-client-id', scope: 'openid profile api', responseType: 'code', silentRenew: true, useRefreshToken: true };
内容的提问来源于stack exchange,提问作者YazanGhafir
相关产品推荐
相关产品推荐

