Удостоверяването чрез 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);
}
}