Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core asp.net核心应用程序中的AzureAD和Azureadbear提供了无效的签名错误_Asp.net Core_Azure Active Directory - Fatal编程技术网

Asp.net core asp.net核心应用程序中的AzureAD和Azureadbear提供了无效的签名错误

Asp.net core asp.net核心应用程序中的AzureAD和Azureadbear提供了无效的签名错误,asp.net-core,azure-active-directory,Asp.net Core,Azure Active Directory,我正在asp.net core 2应用程序中使用AzureAD。我想同时使用cookie和承载身份验证。我在启动文件中有以下代码: public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consen

我正在asp.net core 2应用程序中使用AzureAD。我想同时使用cookie和承载身份验证。我在启动文件中有以下代码:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        //options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => Configuration.Bind("AzureAd", options))
            .AddAzureADBearer(options => Configuration.Bind("AzureAdClient", options));


    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), sqlServerOptions => sqlServerOptions.CommandTimeout(120)));


    //services.AddMvc();
    services.AddMvc(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
                        .RequireAuthenticatedUser()
                        .Build();
        //options.Filters.Add(new AuthorizeFilter(policy));
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

}
现在,当从邮递员处点击时,我可以获得承载令牌,但当我使用该令牌访问此API时,我得到签名无效错误:

WWW认证→承载错误=“无效令牌”,错误描述=“签名无效”


有什么想法吗?

试试下面的方法,应该可以

services.AddAuthentication(sharedOptions =>
{
    sharedOptions.DefaultChallengeScheme = AzureADDefaults.AuthenticationScheme;
    sharedOptions.DefaultAuthenticateScheme = AzureADDefaults.AuthenticationScheme;
})
.AddAzureAD(options => Configuration.Bind("AzureAd", options))
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
在控制器应用程序中,您可以如下设置模式:

[HttpGet]
[Authorize(AuthenticationSchemes = "AzureADBearer")]
public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}
[HttpGet]
[授权(AuthenticationSchemes=“AzureADBearer”)]
公共IEnumerable Get()
{
返回新字符串[]{“value1”,“value2”};
}

希望有帮助。

好吧,我解决了这个问题。现在在asp.net核心web+API项目中,我只使用特定于API的AzureAD设置。对于邮递员和移动应用程序,我创建了一个新的应用程序注册,并为早期的应用程序注册(API应用程序注册)添加了范围,这些应用程序具有用户模拟和访问权限。

授权属性不应该是
Authorize(AuthenticationSchemes=JwtBearerDefaults.AuthenticationScheme)]
这里有一个示例供您参考。您的
AzureAdClient
config是什么?验证令牌的配置是否正确?@NanYu,此配置用于Azure AD上注册的新客户端应用。我已将此新应用作为客户端添加到API应用中。所以我在Azure广告上有两个应用程序,一个用于WebAPI,一个用于客户端。我在发布这个问题之前尝试过这个。我没有工作。同样的问题。
[HttpGet]
[Authorize(AuthenticationSchemes = "AzureADBearer")]
public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}