1

所以我有一个工作的服务器端 Blazor 应用程序,它与我们公司的 Azure AD 相关联,用于一些内部报告表。没有什么花哨的,几乎与周围的所有教程完全一样,而且它本身就可以正常工作。然后,我被要求将其作为我们公司 Teams 选项卡的一部分。

我想我会将它添加为网站选项卡,但随后遇到了一个问题,即 Microsoft 的登录页面不喜欢在 iframe 中(这很有意义)。问题是 - 我可以设置一个选项来强制弹出版本的身份验证而不是重定向吗?下面的 Startup.cs

public void ConfigureServices(IServiceCollection services)
{
 //Add our azure security stuff
 string[] graphScopes = Configuration.GetValue<string>("GraphApi:Scopes")?.Split(',');

 services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAd")
    .EnableTokenAcquisitionToCallDownstreamApi(graphScopes)
    .AddInMemoryTokenCaches();

 //Standard stuff
 services.AddRazorPages();
 services.AddServerSideBlazor().AddMicrosoftIdentityConsentHandler();
 services.AddHttpContextAccessor();

 services.AddControllersWithViews(options =>
 {
    var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
    options.Filters.Add(new AuthorizeFilter(policy));
 }).AddMicrosoftIdentityUI();

 //Add our role handling
 services.AddAuthorization(options =>
 {
    options.AddPolicy("IsAdmin", policy =>
    {
       policy.Requirements.Add(new ADGroupRequirement(new string[] { "{some-hard-coded-test-guid}" }));
    });
 });
 services.AddSingleton<IAuthorizationHandler, ADGroupHandler>();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
 if (env.IsDevelopment())
 {
    app.UseDeveloperExceptionPage();
 }
 else
 {
    app.UseExceptionHandler("/Error");
    app.UseHsts();
 }
 app.UseHttpsRedirection();
 app.UseStaticFiles();
 app.UseRouting();
 app.UseAuthentication();
 app.UseAuthorization();
 app.UseEndpoints(endpoints =>
 {
    endpoints.MapControllers();
    endpoints.MapBlazorHub();
    endpoints.MapFallbackToPage("/_Host");
 });
}

我的下一步是重写 auth 以不使用 nuget 包,而是使用 adal js 库,而不是遵循此页面的文档(MS Teams Silent Auth),虽然它只花了我几天的时间,但我不想报废我认为这是一种更清洁的身份验证方式,可以让它在我们的新用例中工作。希望有人可以指出我缺少的东西。

4

0 回答 0