2015-01-20 3 views
1

Как я могу использовать существующие провайдеры oauth2 servicestack, например Google, и ограничивать их только одной учетной записью, которую я создаю для своих пользователей?ServiceStack и OAuth2

В принципе, я хочу, чтобы доступ к Api был под контролем, так что не все, у кого есть учетная запись google, могут его использовать.

ответ

1

Вы можете использовать CustomValidationFilter, чтобы добавить свой собственный Validation, возвращая нонnull ответ отменит проверку подлинности и возвращает нужный ошибочный ответ, например:

Plugins.Add(new AuthFeature(() => new CustomUserSession(), 
    new IAuthProvider[] { 
     new GoogleOAuth2Provider(appSettings) { 
      CustomValidationFilter = authCtx => { 
       if (!AllowUser(authCtx.Session, authCtx.AuthTokens)) { 
        var url = authCtx.AuthProvider.GetReferrerUrl(
         authCtx.Service, authCtx.Session 
        ).AddParam("f","GoogleOAuthNotAllowed"); 
        return authCtx.Service.Redirect(url); 
       } 
       return null; //Allow Authentication through 
      } 
     }, 
    })); 
+0

ли AllowUser метод, где я буду проверять мою собственную базу данных, чтобы позволить определенным пользователям? – user3500462

+0

... что я имею в виду, как мне разрешить или запретить доступ к пользователю после успешной аутентификации Google. – user3500462

+0

@ user3500462 Да 'AllowUser' - это ваш собственный метод, позволяющий проверять и проверять токены пользователей и токены Google OAuth и решать ли отказывать в них, перенаправляя обратно на страницу реферера с помощью пользовательского '? f = GoogleOAuthNotAllowed', который вы можете обнаружить и предоставить настроенную страницу ошибок. – mythz

Смежные вопросы