如何在IdentityServer4上的TestController上启用[授权],以便声明CRUD控制器
使用来自的OIDC客户端。 和的演示服务器 我在IdentityServer本身上有以下控制器:如何在IdentityServer4上的TestController上启用[授权],以便声明CRUD控制器,identityserver4,Identityserver4,使用来自的OIDC客户端。 和的演示服务器 我在IdentityServer本身上有以下控制器: [Route("api/Test")] //[Authorize] [Authorize(ActiveAuthenticationSchemes = "Bearer")] public class TestController : ControllerBase { public IActionResult Get() { var claims = User.Claim
[Route("api/Test")]
//[Authorize]
[Authorize(ActiveAuthenticationSchemes = "Bearer")]
public class TestController : ControllerBase
{
public IActionResult Get()
{
var claims = User.Claims.Select(c => new { c.Type, c.Value });
return new JsonResult(claims);
}
}
如果我注释掉这两个[Authorize]
属性,我将到达TestController
如果仅使用[Authorize]
,则会出现以下错误:
获取仪表板:1 XMLHttpRequest无法
负载没有“访问控制允许来源”
请求的资源上存在标头。起源
因此不允许访问“”。反应
有HTTP状态代码500
如果我只使用[Authorize(ActiveAuthenticationSchemes=“Bearer”)]
我会得到:
获取仪表板:1 XMLHttpRequest无法
负载没有“访问控制允许来源”
请求的资源上存在标头。起源
因此不允许访问“”。反应
有HTTP状态代码500。仪表板:无法加载1 XMLHttpRequest
. 重定向自
”“到
”“是的
被CORS策略阻止:请求需要飞行前,即
不允许跟随跨原点重定向
我用于从OIDC客户端调用端点的代码是:
test() {
this.authService.mgr.getUser()
.then(user => {
// this.http.get('https://api.identityserver.io/identity',
this.http.get('http://localhost:5000/api/Test',
{ headers: new Headers({ 'Authorization': `${user.token_type} ${user.access_token}`}) })
.subscribe(res => {
console.log(res.json());
});
});
}
我能用这个成功地打电话
这是我的警察助手:
public class DemoCorsPolicy : ICorsPolicyService
{
public Task<bool> IsOriginAllowedAsync(string origin)
{
return Task.FromResult(true);
}
}
公共类民主政治:ICorsPolicyService
{
公共任务IsOriginAllowedAsync(字符串源)
{
返回Task.FromResult(true);
}
}
这就是所谓的表单启动:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<AuthDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
...
services.AddIdentityServer()
.AddTemporarySigningCredential()
.AddInMemoryPersistedGrants()
.AddInMemoryIdentityResources(Resources.GetIdentityResources())
.AddInMemoryApiResources(Resources.GetApiResources())
.AddInMemoryClients(Clients.GetClients())
.AddAspNetIdentity<ApplicationUser>();
services.AddTransient<ICorsPolicyService, DemoCorsPolicy>();
}
public void配置服务(IServiceCollection服务)
{
...
服务.额外性()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
services.AddMvc();
...
services.AddIdentityServer()
.AddTemporarySigningCredential()
.AddInMemoryStedGrants()
.AddInMemoryIdentityResources(Resources.GetIdentityResources())
.AddInMemoryApiResources(Resources.GetApiResources())
.AddInMemoryClients(Clients.GetClients())
.addAsNetIdentity();
services.AddTransient();
}
最终目标是对权限/声明执行CRUD操作。我目前正忙于这个看似琐碎的任务,即拥有一个受授权保护的控制器:/最终,由于我能够在IdentityServer 4外部成功地使用
[Authorize]
,我决定将授权与身份验证分离,并创建一个授权服务器,以分离关注点