Претензии пусты - PullRequest
       9

Претензии пусты

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

Мне нужно получить некоторую информацию от пользователя из претензий.У меня есть это в моем методе контроллера

var MyClaimsPrincipal = (ClaimsPrincipal)System.Web.HttpContext.Current.User;

, но он всегда возвращает пустое

enter image description here

Вот мой Startup.Auth класс

enter image description here

Странно то, что этот код работал раньше, заявки были заполнены из заявок токена, и вдруг это не работает.

токен присутствует в запросе, и если я его декодирую, я вижу претензии enter image description here

Любой совет приветствуется

Я перепроверил иправильные идентификаторы приложения, правильное имя пользовательской политики.

Это Startup.Auth class

public partial class Startup
{
    // These values are pulled from web.config
    public static string AadInstance = ConfigurationManager.AppSettings["ida:AadInstance"];
    public static string Tenant = ConfigurationManager.AppSettings["ida:Tenant"];
    public static string ClientId = ConfigurationManager.AppSettings["ida:ClientId"];
    public static string SignUpSignInPolicy = ConfigurationManager.AppSettings["ida:SignUpSignInPolicyId"];
    public static string DefaultPolicy = SignUpSignInPolicy;

    /*
     * Configure the authorization OWIN middleware 
     */
    public void ConfigureAuth(IAppBuilder app)
    {
        TokenValidationParameters tvps = new TokenValidationParameters
        {
            // Accept only those tokens where the audience of the token is equal to the client ID of this app
            ValidAudience = ClientId,
            AuthenticationType = Startup.DefaultPolicy,
            NameClaimType = "http://schemas.microsoft.com/identity/claims/objectidentifier",
            ValidIssuer = "http://schemas.microsoft.com/identity/claims/iss"
        };

        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
        {
            // This SecurityTokenProvider fetches the Azure AD B2C metadata & signing keys from the OpenIDConnect metadata endpoint
            AccessTokenFormat = new JwtFormat(tvps, new OpenIdConnectCachingSecurityTokenProvider(String.Format(AadInstance, Tenant, DefaultPolicy)))
        });
    }
}

Я использую эту конфигурацию в части внешнего интерфейса:

         clientID: 'id',
         authority: "https://login.microsoftonline.com/tfp/tenantname.onmicrosoft.com/B2C_1A_SignUpOrSignInWithAAD/v2.0/",
        scopes: ["openid"],

и это в API

  <add key="ida:AadInstance" value="https://login.microsoftonline.com/{0}/v2.0/.well-known/openid-configuration?p={1}" />
<add key="ida:Tenant" value="tenantname.onmicrosoft.com" /> 
<add key="ida:ClientId" value="id" />   
<add key="ida:SignUpSignInPolicyId" value="B2C_1A_SignUpOrSignInWithAAD" />

1 Ответ

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

Попробуйте заменить этот код

var MyClaimsPrincipal = (ClaimsPrincipal)System.Web.HttpContext.Current.User;

чем-то вроде этого

var currentClaimsPrincipal = ClaimsPrincipal.Current;

if( currentClaimsPrincipal != null && currentClaimsPrincipal.Claims != null)
{
    var myClaimsPrincipal = new ClaimsIdentity(currentClaimsPrincipal.Claims);
}

ИЛИ, если вы не хотите создавать экземпляр нового ClaimsIdentity, просто используйте ClaimsPrincipal.Current

var MyClaimsPrincipal = ClaimsPrincipal.Current;

Вот хорошая справка по GitHub:

Домашний контроллер для Azure Active Directory Пример

ClaimsIdentity claimsId = ClaimsPrincipal.Current.Identity as ClaimsIdentity;
...