不同网络 api 端点的不同流程
Different flow for different web api endpoints
如何设置 Web API 端点以使用来自 IdentityServer 的不同授权类型?
现在我的 Startup 是:
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions()
{
Authority = "http://localhost:5000",
RequiredScopes = new[] { "public", "read", "write" }
});
控制器:
// Assuming to access this endpoint you need to have client id/secret (client credential flow)
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// Assuming to access this endpoint you need to have username/password (password flow)
[ResourceAuthorization("read")]
public string Get(int id)
{
return "value";
}
当然,一个端点只能有一种授权类型,因为如果客户端流端点也允许密码流,那是没有意义的。
这是一个错误的结构吗?
我是否应该将 public api(凭证流)、密码流端点和内部端点(不暴露给外部公司基础设施)分开到不同的项目?
如何指定不同端点的范围? (例如,一个端点需要 public,一个需要读取)
这很糟糕。您正在将身份验证流程问题与您的 API 结合起来。而是为每个客户端定义不同的范围,并使用这些范围来限制哪些客户端可以使用哪些资源。您可以根据范围进行基于声明的授权。检查 this。
如何设置 Web API 端点以使用来自 IdentityServer 的不同授权类型?
现在我的 Startup 是:
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions()
{
Authority = "http://localhost:5000",
RequiredScopes = new[] { "public", "read", "write" }
});
控制器:
// Assuming to access this endpoint you need to have client id/secret (client credential flow)
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// Assuming to access this endpoint you need to have username/password (password flow)
[ResourceAuthorization("read")]
public string Get(int id)
{
return "value";
}
当然,一个端点只能有一种授权类型,因为如果客户端流端点也允许密码流,那是没有意义的。
这是一个错误的结构吗?
我是否应该将 public api(凭证流)、密码流端点和内部端点(不暴露给外部公司基础设施)分开到不同的项目?
如何指定不同端点的范围? (例如,一个端点需要 public,一个需要读取)
这很糟糕。您正在将身份验证流程问题与您的 API 结合起来。而是为每个客户端定义不同的范围,并使用这些范围来限制哪些客户端可以使用哪些资源。您可以根据范围进行基于声明的授权。检查 this。