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

Я пытаюсь написать свой собственный сервер аутентификации oauth oauthAuthorizationServerProvider. Клиент запрашивает у сервера Authserver маркер. Если учетные данные клиента действительны, то сервер 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:tempMyTest.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авторизации.

P. S: Я хочу отладить TokenEndpointResponseметод, а также классы startup. Как я могу это сделать?

1 ответ

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

    Эти задачи выполняются Microsoft.Owin.Security.OAuthdll.

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

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

    TokenEndpointResponse is the last method executed in the OAuthAuthorizationServerProviderand only if all the validations in the other methods are correct, then you cannot debug until the provider works properly.

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

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