Получите доступ к Azure в сети с помощью openidconnect - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть настольное приложение, в котором я аутентифицирую пользователей через Azure через AuthenticationContext.AcquireTokenAsync.

С помощью этого метода я могу получить токен доступа, отправить его в мой WCF и в моем WCF использовать JwtSecurityToken / ConfigurationManager< OpenIdConnectConfiguration > для проверки токена.

Я реализовал вход через Azure в веб-приложение, настроив его для app.UseOpenIdConnectAuthentication. Поэтому в моем веб-приложении я не вызываю явно метод, который возвращает токен. Скорее я включаю это в поток asp.net.

Но теперь я хочу получить токен в методе и отправить его для проверки аналогично тому, как я это делал в своем настольном приложении. Я не могу найти токен, который ConfigurationManager принимает, однако. Я просмотрел обычные HttpContext и Owincontext, но не нашел никакой полезной информации. accesstoken хранится где-нибудь, где я могу получить его? Или я должен сделать еще один запрос, чтобы получить accesstoken?

1 Ответ

0 голосов
/ 01 сентября 2018

Вы должны получить токен доступа как часть ответа.

Простым способом было бы взглянуть на заголовок авторизации. Посмотрите на код ниже -

HttpContext.Current.Request.Headers["Authorization"];

Кроме того, я не знаю, что вы подразумеваете под отправкой токена для проверки.

Если вы пытаетесь проверить токен вручную, вот пример, который делает именно это -

Проверка токена доступа JWT вручную в веб-API

В примере, в частности, посмотрите на Global.asax.cs

string jwtToken = null;
AuthenticationHeaderValue authHeader = request.Headers.Authorization;
if (authHeader != null)
{
    jwtToken = authHeader.Parameter;
}
if (jwtToken == null)
{
    HttpResponseMessage response = this.BuildResponseErrorMessage(HttpStatusCode.Unauthorized);
        return response;
}

    .........
    .........
    .........

JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();

TokenValidationParameters validationParameters = new TokenValidationParameters
{
    // We accept both the App Id URI and the AppId of this service application
        ValidAudiences = new[] { audience, clientId },

    // Supports both the Azure AD V1 and V2 endpoint
        ValidIssuers = new[] { issuer, $"{issuer}/v2.0" },
        IssuerSigningKeys = signingKeys
};

try
{
    // Validate token.
        SecurityToken validatedToken = new JwtSecurityToken();
        ClaimsPrincipal claimsPrincipal = tokenHandler.ValidateToken(jwtToken, validationParameters, out validatedToken);
...