Удостоверяването чрез Google Oauth чрез Service Stack не настройва сесията след пренасочване обратно от google

Удостоверяването чрез Google Oauth чрез Service Stack не настройва сесията след пренасочване обратно от google. Ето моите кодови фрагменти.

AppHost:

        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:Неупълномощен“. Методът "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
Бих публикувал вашата персонализирана сесия и 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