我正在 ASP .NET Core 中构建一个单页 Web 应用程序,这需要我将一些 URL 映射到一个端点,该端点为名为“index.html”的特定静态文件提供服务。
目前,我使用了一种 hack 解决方案,将所有URL 映射到端点。
_ = app.UseEndpoints(endpoints => {
_ = endpoints.MapControllers();
_ = endpoints.MapGet("/test", async context => {
// I need some way to serve the static file in the response
await context.Response.WriteAsync("Hello world");
});
// TODO replace with actual endpoint mapping
//_ = endpoints.MapFallbackToFile("index.html");
});
Run Code Online (Sandbox Code Playgroud)
相反,我只想将一组特定的 URL 映射到端点。我该如何实现这个目标?
我无法在ASP .NET Core中实现基于策略的授权,以执行剃须刀页面上的操作。
我通读了有关授权的详尽文档,并以其示例为指导。
剃刀页面动作代码:
[Authorize(Policy = "test")]
public async Task<IActionResult> OnGetCreateAsync(string id)
Run Code Online (Sandbox Code Playgroud)
服务配置中的代码:
_ = services.AddAuthorization(options => {
options.AddPolicy("test", policy =>
policy.RequireAssertion(context =>
false));
});
Run Code Online (Sandbox Code Playgroud)
我希望如果我调用动作或端点服务,例如
GET /Account?handler=Create
Run Code Online (Sandbox Code Playgroud)
那么该请求将以403状态响应被拒绝,因为“测试”策略指出每个人都是未经授权的。但是,在实际中,该操作已成功调用。
我想在 ASP .NET Core 中实现一个身份验证系统,其中:
用户单击一个看起来像标准 Google 登录按钮的按钮。
然后系统会提示用户登录 Google 帐户并登录。
阿http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier与值权利要求相等的user_id经签署的谷歌帐户添加到的User在可变RazorBasePage类。
服务器将用户添加到用户表中,user_id并将其作为主键。
我最初研究了使用内置 ASP .NET Identity 系统的解决方案。然而,我很快意识到它的功能远远超过我所需要的。
接下来,我按照这篇文章实现了一个系统,当用户尝试使用带有 [Authorize] 属性标记的控制器或操作时,必须使用他们的 Google 帐户进行身份验证。
同时,我还使用这篇文章研究了一个登录系统。本文实现了一个系统,开发人员可以在其中实现自己的自定义授权系统,例如检查硬编码密码。
而且我还调查了一些谷歌的开发者页面关于身份这个系统允许开发者在客户端轻松实现一个身份验证系统——需要额外的步骤来将身份验证传递给服务器。
这组图像应该有助于传达上述授权系统。我当前在 StartUp.cs 中的 ConfigureServices 方法包含以下代码:
services.AddAuthentication(options => {
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddGoogle(options => {
options.ClientId = Configuration["Authentication:Google:ClientId"];
options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.SaveTokens = true;
});
Run Code Online (Sandbox Code Playgroud)
任何关于如何实现这样一个系统的提示将不胜感激。谢谢!