繁体   English   中英

如何在 WPF 应用程序中使用 Z3A580F142203677F0BC30898 AZFZ 验证 web api

[英]How to authenticate web api in WPF app using Azure AD

我在我的 WPF 应用程序中使用此代码:

 var app = PublicClientApplicationBuilder.Create(_clientId)                                                
   .WithRedirectUri("http://localhost/")                                                  
   .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId).Build();

 try
        {
            result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();

        }
        catch (MsalUiRequiredException)
        {
            return Result<UserMetadata>.NotAuthorized("There was on error");
        }

而且效果很好。 现在我可以调用我的 WEB API 并将“承载令牌”header 发送到所有端点。 (令牌是我从结果中获得的 access_token 属性)

在 web api 我只是这样做:

 _ = services.AddMicrosoftIdentityWebApiAuthentication(Configuration);

它有效。

但是,我不希望所有端点都受到这种方法的保护(我有其他身份验证机制) C# 代码作为结果),将其发送到服务器上并在特定 controller 内部尝试“登录”用户(从该代码获取 access_token)

原因是我已经有了自己的身份验证机制,该机制基于数据库中的用户表。

如果我理解正确,您只想使用 AD 保护选定的 API 端点。 您当然可以通过如下设置Startup.cs来做到这一点:

services.AddAuthentication(options =>
              {
                  options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
              })
                .AddJwtBearer("AAD", jwtOptions =>
                {
                    jwtOptions.Authority = $"{appConfiguration.AppSettings.AadInstance}/{appConfiguration.AppSettings.AadDomain}";
                    jwtOptions.Audience = appConfiguration.AppSettings.AadClientId;
                    jwtOptions.Events = new JwtBearerEvents
                    {
                        OnAuthenticationFailed = arg =>
                        {
                            // invoked if authentication fails
                            return Task.FromResult(0);
                        }
                    };
                    
                });
            
            services.AddAuthorization(options => 
            {
                options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().AddAuthenticationSchemes("AAD").Build();

                options.AddPolicy("AAD", new AuthorizationPolicyBuilder().RequireAuthenticatedUser().AddAuthenticationSchemes("AAD").Build());
            });

并且,将属性添加到要保护的所需 Controller/Action 方法,如下所示:

[Authorize(Policy = "AAD")]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM