401使用react-adal访问受Azure AD保护的API时出错

时间:2019-07-18 14:54:42

标签: reactjs azure .net-core azure-active-directory adal

我正在尝试使用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”。

1 个答案:

答案 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