проверять токен носителя Oauth на сервере ресурсов

Я пытаюсь написать свой собственный сервер аутентификации oauthAuthorizationServerProvider. Клиент запрашивает Authserver для токена. Если учетные данные клиента являются действительными сервером auth с предоставлением токена доступа. теперь клиент отправляет токен с каждым запросом к ресурсу sever. Я не могу понять, как сервер ресурсов проверяет токен, который был сгенерирован сервером auth. может кто-нибудь дать какой-либо пример кода, используя oauthAuthorizationServerProvider.

Ниже приведена реализация, которую я пробовал:

public class AuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        return Task.FromResult<object>(context.Validated());
    }

    public override Task TokenEndpoint(OAuthTokenEndpointContext context)
    {
        foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
        {
            context.AdditionalResponseParameters.Add(property.Key, property.Value);
        }
        return Task.FromResult<object>(null);
    }

    public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
    {
        string path = @"e:\temp\MyTest.txt";
        File.WriteAllText(path, context.AccessToken);
        return base.TokenEndpointResponse(context);
    }
}


public void Configuration(IAppBuilder app)
    {
        ConfigureOAuth(app);
    }

    public void ConfigureOAuth(IAppBuilder app)
    {
        OAuthBearerOptions = new OAuthBearerAuthenticationOptions();

        OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() { 
            AllowInsecureHttp=true,
            TokenEndpointPath= new PathString("/Token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(20),
            Provider = new AuthorizationServerProvider(),

        };
        app.UseOAuthAuthorizationServer(OAuthServerOptions);
        app.UseOAuthBearerAuthentication(OAuthBearerOptions);
    }

Теперь я не могу проверить это, используя postman. может кто-то мне помочь, если моя реализация верна для авторизации client_credentials.

PS: Я хочу отлаживать метод TokenEndpointResponse а также классы при startup. Как я могу это сделать?

0
источник поделиться
1 ответ

Маркер содержит билет аутентификации, созданный сервером авторизации. Сервер ресурсов извлекает билет из токена и проверяет его правильность.

Эти задачи выполняются с помощью dll Microsoft.Owin.Security.OAuth.

Оба сервера авторизации и ресурсов должны использовать один и тот же машинный ключ, который используется для шифрования билета проверки подлинности внутри токена и дешифрования маркера для получения билета. Вы можете включить его в web.config обоих веб-сайтов (серверов):

<system.web>
    ...
    <machineKey validationKey="BDE1234FBD71982481D87D815FA0A65B9F5982D123FA96E5672B78ABCD52D58818B479B19FF6D95263E85B0209297E68ABBA7D1E0BD3EABCD5E35742DEA5F2A7" 
        decryptionKey="8E8496D7342EA25ABCDEF6177E04EA00008E359C95E60CD0789456123B9ED2B3" 
        validation="SHA1" decryption="AES" />
    ...
</system.web>

TokenEndpointResponse - последний метод, выполняемый в OAuthAuthorizationServerProvider и только если все проверки в других методах верны, вы не можете отлаживать, пока провайдер работает правильно.

Я основал свою реализацию сервера oauth в следующем сообщении Taiseer Joudeh, я думаю, вы можете видеть свет, читающий его объяснения и просматривая код.

Я надеюсь, это поможет вам.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос