В классе запуска промежуточного программного обеспечения Owin я добавил аутентификацию OIDC, где типом ответа является «код id_token».С помощью этого промежуточного программного обеспечения я могу получить доступ к своему авторизованному контроллеру.Но проблема в том, что я не могу получить доступ к своему API в том же домене с помощью этого промежуточного программного обеспечения.
Я использую токен доступа, который я сохранил в userClaim.Но он возвращает HTML-страницу входа в IdentityServer4.
[Filters.AuthorizeOIDC(Roles = "dukkan.sa")]
public async Task<ActionResult> ViewApiResult()
{
var user = User as System.Security.Claims.ClaimsPrincipal;
var token = user.FindFirst("access_token").Value;
var result = await CallApi(token);
ViewBag.Json = result;
return View();
}
private async Task<string> CallApi(string token)
{
var client = new HttpClient();
client.SetBearerToken(token);
var json = await client.GetStringAsync("http://localhost:57346/api/SampleApi");
return json;
}
Примеры, которые я получил для защиты MVC API, относятся к IdentityServer3.Они используют пакет IdentityServer3.AccessTokenValidation для аутентификации клиента из обратного канала во время запроса доступа к API:
app.UseOAuthBearerAuthentication(new IdentityServerBearerTokenAuthenticationOptions { Authority = "https://localhost:44319/identity", RequiredScopes = new[] { "sampleApi" } });
Но IdentityServer4.AccessTokenValidation не работает с MVC5.Я могу использовать IdentityServer3.AccessTokenValidation в MVC 5. Но это принимает IdentityModel с версией ниже 2.0.0.
Нужно решение для этого.IdentityServer4 не поддерживает должным образом для MVC.