Authentication.AuthenticateAsyn c возвращает ноль - PullRequest
0 голосов
/ 09 января 2020

Я хочу получить токен доступа Azure B2 C AD из httpContext или аналогичного, но я использую. NET framework 4.7.2. Если бы я использовал ядро. Net, я бы использовал HttpContext.Authentication.GetTokenAsync().

Фон

Я использую OpenIdConnect 4.1.0.

Мои OpenIdConnectAuthenticationOptions выглядят так:

private OpenIdConnectAuthenticationOptions CreateOptionsFromSiteConfig(B2CConfig config)
{
    OpenIdConnectAuthenticationOptions options = new OpenIdConnectAuthenticationOptions();
    options.MetadataAddress = string.Format(_aadInstance, _tenant, config.Policy);
    options.AuthenticationType = [B2CAD-POLICY-name];
    options.AuthenticationMode = AuthenticationMode.Passive;
    options.RedirectUri = config.AzureReplyUri;
    options.PostLogoutRedirectUri = config.LogoutRedirectUri;
    options.TokenValidationParameters = new TokenValidationParameters
    {
        NameClaimType = "emails"
    };

    options.SaveTokens = true;
    options.RedeemCode = true;

    var identityProvider = GetIdentityProvider();

    options.Notifications = new OpenIdConnectAuthenticationNotifications()
    {
        AuthenticationFailed = AuthenticationFailed,

        RedirectToIdentityProvider = notification =>
        {
            return Task.FromResult(notification.ProtocolMessage.UiLocales = config.UiLocale ?? string.Empty);
        },
        SecurityTokenValidated = notification =>
        {
            notification.AuthenticationTicket.Identity.AddClaim(new Claim("idp", "azureadb2c"));

            // transform all claims
            ClaimsIdentity identity = notification.AuthenticationTicket.Identity;
            notification.AuthenticationTicket.Identity.ApplyClaimsTransformations(new TransformationContext(FederatedAuthenticationConfiguration, identityProvider));

            return Task.CompletedTask;
        },
    };

    options.ClientId = config.ClientId;
    options.Scope = "openid [api-scope-here]";
    options.ResponseType = "id_token token";

    return options;
}

Существует несколько политик с одинаковым именем (т. Е. Несколько типов AuthenticationTypes с одинаковым именем).

До сих пор я нашел несколько предложений, где большинство многообещающий предложил:

var result = await owinContext.Authentication.AuthenticateAsync([B2CAD-POLICY-name]));
string token = result.Properties.Dictionary["access_token"];

Однако результат всегда равен NULL, хотя я убедился, что политика b2cad действительно присутствует в OwinContext.

Любая помощь очень ценится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...