不同网络 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