oauth2: «подпретензия отсутствует в конечной точке userinfo» Идентификатор открытия Microsost Connect - OID C CLient - PullRequest
0 голосов
/ 11 января 2020

Я использую Microsoft OidcClient для oauth2.0 для учетных записей Google, и я получаю

"подпретензия отсутствует в конечной точке userinfo" ошибка ".

Может кто-нибудь подсказать, если я что-то упускаю или делаю что-то не так.

public async Task Authorize ()
{
    InitializeComponent ();

    var providerInformation = new ProviderInformation
    {
        IssuerName = "accounts.google.com",
        AuthorizeEndpoint = "https://accounts.google.com/o/oauth2/auth",
        TokenEndpoint = "https://oauth2.googleapis.com/token",
        //UserInfoEndpoint = "https://openidconnect.googleapis.com/v1/userinfo",
        UserInfoEndpoint = "https://www.googleapis.com/oauth2/v3/tokeninfo", 
        KeySet = new JsonWebKeySet()
    };

    var scope = "https://www.googleapis.com/auth/fitness.blood_glucose.read https://www.googleapis.com/auth/fitness.body.read https://www.googleapis.com/auth/fitness.activity.read https://www.googleapis.com/auth/fitness.blood_pressure.read"; https://www.googleapis.com/auth/fitness.blood_glucose.read https://www.googleapis.com/auth/fitness.body.read https://www.googleapis.com/auth/fitness.activity.read https://www.googleapis.com/auth/fitness.blood_pressure.read"; 

    var options = new OidcClientOptions
    {
        Authority = "https://accounts.google.com/o/oauth2/auth",
        ClientId = "xyz",
        Scope = scope,
        RedirectUri = "com.abc.xyzt:/oauthredirect",
        Browser = browser,
        ProviderInformation = providerInformation,
        //ResponseMode = OidcClientOptions.AuthorizeResponseMode.Redirect,
        TokenClientCredentialStyle = IdentityModel.Client.ClientCredentialStyle.AuthorizationHeader
    };

    _client = new OidcClient(options);
    await _client.LoginAsync(new LoginRequest());
}

Я получаю 6 различных типов претензий, но я не получаю JwtClaimTypes.Subject "sub", который ищет библиотека. enter image description here

Может кто-нибудь помочь или предложить, как решить эту проблему?

1 Ответ

0 голосов
/ 14 января 2020

Я нашел решение. Я предоставлял слишком много информации. Вместо того, чтобы вычислять библиотеку на основе конечной точки обнаружения службы.

public async Task Authorize ()
{
            var discovery = new DiscoveryPolicy
            {
                ValidateEndpoints = false,
                Authority = "https://accounts.google.com"
            };

            OidcClientOptions oidcClientOptions = new OidcClientOptions
            {
                Authority = "https://accounts.google.com",
                ClientId = "2345678",
                Scope = "https://www.googleapis.com/auth/fitness.body.read",
                RedirectUri = "com.abc.xyz",
                Browser = IoCRegistry.Locate<IBrowser>(),
                ResponseMode = OidcClientOptions.AuthorizeResponseMode.Redirect,
                Policy = new Policy
                {
                    Discovery = discovery,
                    RequireAccessTokenHash = false 
                }
            };

           var _client = new OidcClient(oidcClientOptions);
           var result = await _client.LoginAsync(new LoginRequest());
}
...