Как получить доступ к MVC API, который авторизуется с помощью IdentityServer4 - PullRequest
0 голосов
/ 15 октября 2018

В классе запуска промежуточного программного обеспечения 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.

1 Ответ

0 голосов
/ 17 октября 2018

Почему вы хотите использовать IdentityServer4.AccessTokenValidation с MVC5?Поскольку сервером является IdentityServer4?

В этом нет необходимости.IdentityServer3 и IdentityServer4 основаны на одних и тех же спецификациях OpenId Connect, а это означает, что вы можете использовать IdentityServer3.AccessTokenValidation для клиента, пока сервером является IdentityServer4.

Фактически вы можете использовать любой фрагмент кода на клиенте, который является сборкойв соответствии со спецификациями OpenId Connect.Я предлагаю вам попробовать IdentityServer3.AccessTokenValidation.

...