当前位置: 首页 > 知识库问答 >
问题:

添加Azure AD身份验证时出现CORS错误

洪鸿
2023-03-14

尝试将Azure AD身份验证添加到具有. net核心2.1后端的Angular 7 webapp。

然而,我在请求过程中收到了CORS错误。

“访问位于的XMLHttpRequest”https://login.microsoftonline.com/.......“(重定向自”https://localhost:5001/api/auth/login“)起源”https://localhost:5001'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'头。"

所以我试着在启动管道中添加一些CORS策略。

创业。反恐精英

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }    

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(config => config
             .AddPolicy("SiteCorsPolicy", builder => builder
               .AllowAnyHeader()
               .AllowAnyMethod()
               .AllowAnyOrigin()
               .AllowCredentials()
              )
           ); // <--- CORS policy - allow all for now

            services.AddAuthentication(options =>
            {
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;                
            })
            .AddOpenIdConnect(options =>
            {
                options.Authority = "https://login.microsoftonline.com/MY_AD_DOMAIN.onmicrosoft.com";   // ad domain            
                options.ClientId = "my_client_id"; // client guid
                options.ResponseType = OpenIdConnectResponseType.IdToken;
                options.CallbackPath = "/auth/signin-callback";
                options.SignedOutRedirectUri = "https://localhost:5000";
                options.TokenValidationParameters.NameClaimType = "name";
            }).AddCookie();

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            // In production, the Angular files will be served from this directory
            services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/dist";
            });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseCors("SiteCorsPolicy"); // <--- CORS policy
            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseSpaStaticFiles();

            app.UseAuthentication();
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action=Index}/{id?}");
            });

            app.UseSpa(spa =>
            {
                spa.Options.SourcePath = "ClientApp";
                if (env.IsDevelopment())
                {
                    spa.UseAngularCliServer(npmScript: "start");
                }
            });
        }
    }

角度身份验证服务

login() {        
    const url = this.baseUrl + "api/auth/login";
    this._http.get(url).subscribe(response => {
      console.log(response);
    });
  }

还是我走错了方向?我应该使用第三方的“ADAL”npm软件包吗(https://www.npmjs.com/package/adal-angular)从客户端提取令牌,然后将令牌传递给服务器进行验证?

如果我导航到登录URL,例如:localhost:5000/api/auth/login--

共有1个答案

杜楚
2023-03-14

你的做法有点不对。您已经配置了OIDC Cookies,但想要使用XHR调用它。

典型的方法是:

  • 在API上配置JWT承载令牌身份验证

一些可能有帮助的样本/文章:

  • https://github.com/Azure-Samples/active-directory-angularjs-singlepageapp-dotnet-webapi
  • https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/MSALAngularDemoApp
  • https://github.com/azure-samples/active-directory-dotnet-native-aspnetcore-v2
  • https://joonasw.net/view/azure-ad-authentication-aspnet-core-api-part-1
  • https://joonasw.net/view/azure-ad-authentication-aspnet-core-api-part-2

请记住,ADAL只能用于AAD v1终结点,MSAL只能用于v2终结点。

 类似资料:
  • 问题与Azure相关,即使用户正在积极使用应用程序,也会出现Easy Auth过期的情况。根据分享的解释,简单的身份验证机制似乎并不适合Azure Web应用上托管的SPA?MS是否可以在官方文档下添加提到的选项-“https://docs.microsoft.com/en-in/Azure/app-service/app-service-authentication-overview?toc=%

  • 我试图在我的rails应用程序中使用LinkedIn的api进行身份验证。我对rails很陌生,所以我遵循了以下指南http://sourcey.com/rails-4-omniauth-using-devise-with-twitter-facebook-and-linkedin/ 耙中止!NameError:main的未定义局部变量或方法'/users/AlexanderKehaya/.rvm

  • 我已经安装了OpenLDAP服务器。 如何在LDAP服务器中添加用户(条目)?以及如何打开该服务器的命令窗口,以便在其上运行ldap命令: :我的要求是:在我的应用程序中,我想对Openldap服务器中添加的用户进行身份验证,但我只能在windows os上安装Openldap服务器,但如何添加用户我无法获得方法。在Windows7操作系统上安装openLDAP whic时添加用户的方法是什么?这

  • 我想添加只允许经过身份验证的用户在Jitsi会议中创建会议的功能。我看到了外部API的jwt参数、config.tokenAuthUrl和lib-jitsi-met令牌文档,但我对如何将它们放在一起感到非常困惑。 现在,我的工作流程如下: 用户通过自定义应用程序登录谷歌。 用户被重定向到一个新的Jitsi会议,使用从Google登录信息派生的jwt参数。 我遇到的问题是验证这个令牌,以及如何设置它

  • 我正在尝试将SASL_PLAINTEXT身份验证配置为kafka代理,下面是我的配置。 在开始动物园管理员和Kafka之后,我得到了以下例外 kafka.Kafka.main:要求失败:Kafka.scala必须是在advertised.listeners.中定义的侦听器名称基于当前配置的侦听器的有效选项是PLAINTEXTjava.lang.IllegalArgumentException:要求

  • 问题内容: 因为在AngularJS中使用CORS和http身份验证可能会比较棘手,所以我编辑了问题以分享一个经验教训。首先,我要感谢igorzg。他的回答对我很有帮助。场景如下:您想使用AngularJS $ http服务将POST请求发送到另一个域。获取AngularJS和服务器设置时,需要注意一些棘手的事情。 第一:在您的应用程序配置中,您必须允许跨域调用 第二:您必须指定withCrede