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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:55:36