Asp.net core asp.net核心应用程序中的AzureAD和Azureadbear提供了无效的签名错误
我正在asp.net core 2应用程序中使用AzureAD。我想同时使用cookie和承载身份验证。我在启动文件中有以下代码: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
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" };
}