Аутентификация с использованием 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);
}
}