Аутентификация с использованием Google Oauth через стек служб не устанавливает сеанс после перенаправления обратно из google

Аутентификация с использованием Google Oauth через стек служб не устанавливает сеанс после перенаправления обратно из Google. Вот мои фрагменты кода.

Хост приложения:

        Plugins.Add(new AuthFeature(() => new CustomuserSession(), new IAuthProvider[]
        {
            new CustomCredentialsAuthProvider(container.Resolve<IAuthentication>()),
            new GoogleOAuth2Provider(appSettings), //Sign-in with Google OpenId
        }));

Web.config:

<add key="oauth.CallbackUrl" value="http://localhost:57162/Home" />
<add key="oauth.RedirectUrl" value="http://localhost:57162/auth/googleoauth" />
<add key="oauth.GoogleOAuth.ConsumerKey" value="MyConsumerKey"/>
<add key="oauth.GoogleOAuth.ConsumerSecret" value="MyConsumerSecret"/>

Аутентификация проходит нормально, но как только она перенаправляется обратно в мое приложение, информация о сеансе не устанавливается, и, следовательно, вызовы службы anr по-прежнему возвращают код состояния «403: Unauthorized». Метод «OnAuthenticated» внутри моего пользовательского объекта сеанса вообще не вызывается. Я что-то упускаю?

Обновление 1:

Вот мой пользовательский объект сеанса с методом «OnAuthenticated». И я вызываю base.OnAuthenticated внутри него. Но проблема заключается в том, что сам метод OnAuthenticated пользовательского объекта сеанса не срабатывает, что означает, что что-то происходит до того, как аутентификация произойдет, или это не происходит должным образом, что я не могу понять. Любая помощь будет оценена по достоинству. Спасибо.

   public class CustomUserSession : AuthUserSession
   {
    private readonly IAuthentication _authentication;
    private const string DefaultRedirect = "Home";
    public UserDetails UserDetails { get; set; }

    public CustomUserSession(IAuthentication authentication)
    {
        _authentication = authentication; 
    }

    public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IAuthTokens tokens, Dictionary<string, string> authInfo)
    {
        var redirectUrl = HttpUtility.ParseQueryString(authService.Request.UrlReferrer.Query)["redirect"] ?? DefaultRedirect;        
        foreach (var authToken in session.ProviderOAuthAccess)
        {
            UserDetails = _authentication.Authenticate(authToken.UserId);
            if (authToken.Provider == GoogleOAuth2Provider.Name)
            {
                UserDetails.UserId = authToken.UserId;
                UserDetails.FirstName = authToken.FirstName;
                UserDetails.LastName = authToken.LastName;
                UserDetails.Email = authToken.Email;
            }
            authService.SaveSession(session);          
        }
        base.OnAuthenticated(authService, session, tokens, authInfo);
        session.ReferrerUrl = authService.Request.UrlReferrer.AbsoluteUri.Replace(authService.Request.UrlReferrer.PathAndQuery, redirectUrl);
    }
}

person Venkatakrishnan    schedule 15.09.2014    source источник
comment
Может кто-нибудь, пожалуйста, дайте мне знать, если я что-то пропустил здесь, так как это было бы очень полезно. если вам нужна дополнительная информация для размещения, пожалуйста, дайте мне знать Спасибо.   -  person Venkatakrishnan    schedule 17.09.2014
comment
Я бы опубликовал ваш пользовательский метод Session и OnAuthenticated. Похоже, вы не звоните в base.OnAuthenticated   -  person Darren Reid    schedule 17.09.2014
comment
Обновил вопрос   -  person Venkatakrishnan    schedule 18.09.2014


Ответы (1)


Судя по предоставленному вами коду, вы не используете свой CustomUserSession со своим AuthFeature.

Ваша фабрика сеансов, первый аргумент AuthFeature, должна возвращать экземпляр вашего CustomUserSession.

Plugins.Add(new AuthFeature(() => new CustomUserSession(), new IAuthProvider[] { new CustomCredentialsAuthProvider(container.Resolve<IAuthentication>()), new GoogleOAuth2Provider(appSettings), //Sign-in with Google OpenId }));

person Darren Reid    schedule 18.09.2014
comment
Спасибо за ответ. Извините, мой плохой .. На самом деле это CustomuserSession. Между тем я попытался попробовать тот же код с гораздо более простым классом, который я назвал Session, но забыл удалить его, когда отправил вопрос. Но даже при этом проблема сохранялась. Обновил и вопрос. - person Venkatakrishnan; 18.09.2014
comment
Возможно, вы захотите собрать проект, потому что в вашем вопросе все еще есть проблемы с кодом, например, у CustomUsersession есть один конструктор, принимающий «IAuthentication» (который, как я предполагаю, является вашим собственным интерфейсом), который не отражается во фрагменте кода выше. Трудно изолировать проблему без точной картины того, что происходит. Если бы вы могли составить проект, иллюстрирующий проблему, я могу взглянуть. Ваше здоровье. - person Darren Reid; 19.09.2014