在向我的应用程序添加新的承载身份验证方面,我遇到了一些困难,我无法弄清楚,我需要的一段代码导致我的端点返回 404 错误,但删除后我能够成功访问没有 404 错误的端点,请参见下文。
首先,我的应用程序既充当身份服务器,又充当接受不记名令牌的 API。
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "https://www.example.com/";
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false
};
});
services.AddAuthorization(options =>
{
options.AddPolicy("ApiScope", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireClaim("scope", "openid");
});
});
// THIS IS THE CODE CAUSING THE 404 ERROR
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<DevContext>();
Run Code Online (Sandbox Code Playgroud)
从上面来看,如果我尝试到达使用 [Authorize] 装饰的控制器端点,那么我会看到 404 响应。如果我注释掉最后几行(请参阅代码中的注释),那么我就能够成功到达我的端点。
为什么我会收到 404 错误?我认为这一定是因为 .AddIdentity 正在覆盖承载身份验证,并且因为我的控制器用 [Authorize] 装饰,所以我无法访问它?
难道我的应用程序不能同时作为 API 和身份服务器吗?
这是当有问题的代码被取消注释时(404 响应)我在输出日志中看到的内容:
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request starting HTTP/2.0 GET https://localhost:44310/api
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService: Information: Authorization failed.
Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler: Information: AuthenticationScheme: …
Run Code Online (Sandbox Code Playgroud) 我有一个LINQ to Entities编写,它正在使用以下OrderBy:
.OrderBy(i => Guid.NewGuid())
Run Code Online (Sandbox Code Playgroud)
上面随机化了数据集的顺序,因此每次运行此代码时都会产生不同的顺序.
但是,如果我执行以下任何操作,则数据集不是随机的,并且是所有3个OrderBy的完全相同,请参见下文:
.OrderBy(i => new Guid("5fd3e5e7-b172-42f5-a4dd-da4212201a31"))
.OrderBy(i => new Guid("beb7345c-1421-48e0-b177-51b2bb065214"))
Guid g = Guid.NewGuid();
.OrderBy(i => g)
Run Code Online (Sandbox Code Playgroud)
您可以看到上面的3个OrderBy正在使用不同的Guid,那么为什么它们会生成相同的订单呢?为什么每次运行这段代码时Guid.NewGuid()都会将列表随机化,但是其他3个OrderBy语句每次产生相同的结果?
我的问题是,我需要将一个值传递给一个函数,该函数在LINQ to Entities数据集中用于根据值随机化结果,但是我还需要能够传递相同的值并检索相同的顺序随机性.
谢谢.