我刚开始使用 Identity Server 4。
我正在尝试使用 Client Credentials 授权类型来保护 API。
我在 IS4 中有一个 API 设置:
public static IEnumerable<ApiResource> Apis =>
new List<ApiResource>
{
new ApiResource("myapi", "Test API")
{
ApiSecrets = { new Secret("secret".Sha256() )}
}
};
我也有以下客户端设置:
public static IEnumerable<Client> Clients =>
new List<Client>
{
new Client
{
ClientId = "testc",
ClientName= "Test Client",
AllowedGrantTypes = GrantTypes.ClientCredentials,
ClientSecrets =
{
new Secret("m2msecret".Sha256())
},
AllowedScopes = new List<string>
{
"myapi"
}
},
};
我在 API 中有一个要保护的控制器:
[Authorize]
public class TestController : ControllerBase {}
如果我随后创建一个令牌请求,如下所示:
var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
Address = disco.TokenEndpoint,
ClientId = "testc",
ClientSecret = "m2msecret",
Scope = "myapi",
});
这允许我调用 API 并访问资源。完美的!
但是,我想用一个角色来保护控制器,例如
[Authorize(Roles = "admin")]
public class TestController : ControllerBase {}
所以我的两个问题是:
1:如何使用客户端凭据设置基于角色的授权?
2:由于客户端凭据未链接到用户,我如何保持记录更改的审计跟踪,例如供应商 X 由 userId 5 更新,等等。
谢谢