我有一个客户端拥有OpenIdConnect(OIDC)令牌的场景。 OIDC是从外部OIDC提供商发出的,我不是OIDC提供商,只是它的下游消费者。
目标是让客户端交换所说的OIDC令牌,用于临时凭证或accessstoken,这将使他们能够访问更具体的资源。
就我而言,OIDC代表一个用户。客户端具有ClientId / Secret,用于建立服务2服务信任。最后,我想要的东西看起来很像CustomGrant令牌请求。
static TokenResponse GetCustomGrantToken()
{
var client = new TokenClient(
token_endpoint,
"custom_grant_client",
"cd19ac6f-3bfa-4577-9579-da32fd15788a");
var customParams = new Dictionary<string, string>
{
{ "some_custom_parameter", "some_value" }
};
var result = client.RequestCustomGrantAsync("custom", "read", customParams).Result;
return result;
}
我的customParams将包含我的用户的OIDC。
问题:我可以从GetCustomGrantToken调用中获取令牌,但后续Webapi调用无法通过授权。即Identity.isAuthenticated为false。
如果我获得了clientcredential令牌,那么一切正常。
static TokenResponse GetClientToken()
{
var client = new TokenClient(
token_endpoint,
"silicon",
"F621F470-9731-4A25-80EF-67A6F7C5F4B8");
return client.RequestClientCredentialsAsync("api1").Result;
}
如果CustomGrantToken工作,我会将我的用户帐户信息放入索赔中,从而在后续的WebApi调用中为我提供上下文。
任何方向都会受到赞赏。