我正在尝试使用Azure AD Auth在Azure中设置一个具有React前端+ .NET Core后端的应用程序。后端将调用其他API,并保留一些逻辑。我设置了.NET Core应用程序并将其托管在Azure应用程序服务中,然后使用the connected services wizard in visual studio添加了身份验证,该身份验证生成的代码类似于this tutorial(后端部分)上的代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddAzureAdBearer(options => Configuration.Bind("AzureAd", options));
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication();
...
}
appsettings.json(假ID):
"AzureAd": {
"ClientId": "1fff1098-3bc0-40d9-8cd0-e47b065085b6",
"Domain": "mytenant.onmicrosoft.com",
"Instance": "https://login.microsoftonline.com/",
"TenantId": "mytenantid",
"AppIDURL": "https://my-api.azurewebsites.net/",
"ConfigView": "API"
}
然后,我在前端设置了react-adal:
{
tenant: "mytenant.onmicrosoft.com",
clientId: "1fff1098-3bc0-40d9-8cd0-e47b065085b6",
endpoints: {
api: "1fff1098-3bc0-40d9-8cd0-e47b065085b6"
},
cacheLocation: "localStorage"
};
我根据github instructions进行设置以设置react-adal。登录可以按预期工作,但是当我在后端运行adalApiFetch时,出现描述错误401错误=签名无效。我可以在调试器上看到发送了授权标头(Bearer +令牌)。关于我可能在这里做错的任何想法?预先感谢!
我正在测试的端点是一个简单的测试控制器(带有[Authorize]),该控制器仅返回“ Authentication Tested”。
答案 0 :(得分:0)
一段时间后,我能够找到我的错误,然后回来发布解决方案。问题是我使用的方法/设置不正确(不匹配)。从问题的代码开始:如果使用sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
,则还应该将AddJwtBearer与适当的配置选项(在此处找到:JwtBearerOptions)一起使用,而不要使用AddAzureAdBearer。就我而言,最终更正后的启动代码是
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd",options));
....
具有相应的设置(在此处找到:AzureADOptions)