我的 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
我想我已经修好了。感谢 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 企业应用程序来运行它。