我们在Azure PaaS(AppService)中托管了一个现有的ASP.NET Core 2.0 Web App。我们成功使用OpenID Connect通过Azure AD对我们的企业用户进行身份验证。
现在我们想要几个内部部署的无头.NET批处理作业,它们使用应用程序身份验证来调用应用程序中的各种服务/ URL。
如果我们的一个客户端应用程序需要Azure门户中的权限并授予权限,我们会在Azure租户中向清单添加应用程序角色。我们只使用一个租户。
我们正在寻找有关需要修改的内容的指南,以便使用应用程序客户端ID + secret添加对无头批处理客户端应用程序身份验证的支持。
我对.AddOpenIdConnect
的问题是:是否需要指定受众群体? ResponseType是否需要设置为不同的东西?
来自appsettings.json:
"Authentication": {
"AzureAd": {
"AADInstance": "https://login.microsoftonline.com/",
"CallbackPath": "/signin-oidc",
"ClientId": "c2141xxx-xxxx-xxxx-xxxx-xxxxxx76fd75",
"Domain": "xxxxxxxxx.onmicrosoft.com",
"TenantId": "311cxxxx-xxxx-xxxx-xxxx-xxxxxx8f8604",
"ClientSecret": "************************",
"Instance": "https://login.microsoftonline.com/"
}
}
来自startup.cs:
services.AddAuthentication(
options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.ClientId = Configuration["Authentication:AzureAd:ClientId"];
options.ClientSecret = Configuration["Authentication:AzureAd:ClientSecret"];
options.Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"];
options.CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"];
options.ResponseType = OpenIdConnectResponseType.IdToken;
options.GetClaimsFromUserInfoEndpoint = true;
options.TokenValidationParameters = new TokenValidationParameters
{
RoleClaimType = "roles"
};
options.Events = new OpenIdConnectEvents()
{
OnRemoteFailure = OnAuthenticationFailed,
OnRedirectToIdentityProvider = OnRedirectToIdentityProvider,
};
});
在客户端应用程序端,我们使用最新的ADAL NuGet包来获取应用程序的客户端应用程序ID +机密的持有者令牌,并将持有者令牌包含在应用程序的HTTP请求的授权头中。令牌中列出了正确的角色和目标受众。
据我所知,客户端的一切都是正确的,并在Azure中正确配置。问题似乎出现在ASP.NET Core 2.0服务应用程序的代码和/或配置中。
答案 0 :(得分:0)
对于无头的客户,我建议使用JwtBearer。您可以使用默认的Microsoft配置,添加使用不同身份验证选项(如果使用Azure Ad或Office365,可以使用工作或学校帐户)添加网络核心Web API时可以找到的所有配置
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddAzureAdBearer(options => _configuration.Bind("AzureAd", options));