Blazor 服务器 - Microsoft Identity Web 应用程序和 Web API

问题描述 投票:0回答:1

我的 Blazor 服务器提供 anm API 和 Web 应用程序。 API 由桌面客户端使用,而 Web 应用程序就像一个管理工具,用于在服务器上配置和设置内容。

现在我想使用我的 AzureAD 来验证和授权我的用户。 因此,我对我的剃刀页面使用

@attribute [Authorize(Roles = "MyRole")]
,对我的控制器使用
[Authorize(Roles = "MyRole")]
属性。

我的 AzureAd 配置如下所示:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "[mydomain.com]",
  "TenantId": "[myTenantId]",
  "ClientId": "[myClientId]",
  "CallbackPath": "/signin-oidc",
  "SignedOutCallbackPath ": "/signout-callback-oidc"
}

使用 Web 应用程序进行身份验证和授权 Web API 正在运行。

Web API Startup.cs:

services.AddMicrosoftIdentityWebApiAuthentication(GetConfiguration());
services.AddControllersWithViews();
services.AddRazorPages();
services.AddServerSideBlazor();

Web 应用程序启动.cs:

services.AddMicrosoftIdentityWebAppAuthentication(GetConfiguration());
services.AddControllersWithViews().AddMicrosoftIdentityUI();
services.AddRazorPages();
services.AddServerSideBlazor().AddMicrosoftIdentityConsentHandler();

但到目前为止我未能配置我的 Startup.cs 以使用两者。它应该可以工作,这里是一个例子。

当前尝试:

var configuration = GetConfiguration();
services.AddMicrosoftIdentityWebApiAuthentication(configuration);
services.AddMicrosoftIdentityWebAppAuthentication(configuration);
services.AddControllersWithViews().AddMicrosoftIdentityUI();
services.AddRazorPages();
services.AddServerSideBlazor().AddMicrosoftIdentityConsentHandler();

有什么想法可以解决这个问题吗?

编辑 1:对于我当前的尝试,通过 AddMicrosoftIdentityWebApiAuthentication 对我的客户端进行身份验证正在工作,但如果我尝试在我的 Web 应用程序中进行身份验证,AzureAd 登录会成功,但在重定向到我的应用程序后,没有用户登录。

编辑2:相关问题:在同一个ASP.NET Core 7应用程序中使用AddMicrosoftIdentityWebApi和AddMicrosoftIdentityWebApp

c# .net azure azure-active-directory microsoft-identity-web
1个回答
0
投票

我想我已经修好了。感谢 LeeAdamas stackoverflow 问答

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration);

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(Configuration);

services.AddAuthorization(options =>
{
    options.DefaultPolicy = new AuthorizationPolicyBuilder(
            JwtBearerDefaults.AuthenticationScheme,
            OpenIdConnectDefaults.AuthenticationScheme)
        .RequireAuthenticatedUser()
        .Build();
});

services.AddControllersWithViews().AddMicrosoftIdentityUI();
services.AddRazorPages();
services.AddServerSideBlazor().AddMicrosoftIdentityConsentHandler();

并像这样更改了我的控制器的属性:

[Authorize(Roles = "[MyRoleDefinedInAzureAd]", AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class MyController : Controller
{
   ...
}

AzureAd 配置部分未更改,我只有一个 Azure 应用程序注册和 Azure 企业应用程序来运行它。

© www.soinside.com 2019 - 2024. All rights reserved.