ios - oauth2 - using google oauth




403 Erro-Isso é um erro. Erro: disallowed_useragent (8)

A resposta curta é que o Google atualizou suas restrições de segurança para o fluxo OAuth. Eles não permitem que visualizações nativas da Web iniciem fluxos OAuth, mas incentivam as pessoas a usar os navegadores de SO para fazer isso. No seu caso, você provavelmente precisará aguardar o SDK do calendário do Google para atualizar o código para obedecer ao fluxo recomendado recentemente. Mais informações estão disponíveis no blog do Google

EDIT: Tentei criar um plug-in de plataforma cruzada que envolva os SDKs de login nativos do Google para usar em um aplicativo de formulários Xamarin. Mais informações podem ser encontradas here

Estou tentando autorizar um usuário para a API de calendário do Google em um aplicativo IOS. Estou usando o recurso OAuth2 do Google para autenticar usuários. A página de autorização é aberta com um erro 403 com a descrição:

Esse agente de usuário não tem permissão para fazer uma solicitação de autorização do OAuth ao Google, pois é classificado como um agente de usuário incorporado (também conhecido como visualização na web). De acordo com nossa política, somente navegadores têm permissão para fazer solicitações de autorização ao Google. Oferecemos várias bibliotecas e exemplos de aplicativos nativos para executar solicitações de autorização no navegador.

Segui o mesmo procedimento mencionado neste link: https://developers.google.com/google-apps/calendar/quickstart/ios

Em vez de ver meu código, é melhor consultar este link: https://developers.google.com/google-apps/calendar/quickstart/ios porque colei a mesma coisa no meu aplicativo.

abaixo estão meus clientId e keyChainItemName:

static NSString *const kKeychainItemName = @"Google Calendar API";
static NSString *const kClientID = @"954370342601-sgl8k0jrbqdeagea9v6vfu3tspte96ci.apps.googleusercontent.com";

Como mencionado nas respostas anteriores, o SFSafariViewController é um caminho a percorrer, mas para aqueles que ainda usam a autorização do WKWebView for OAuth, existe uma solução simples.

Apenas altere customUserAgent para um da list ou defina-o para algum valor arbitrário. Após esse erro disallowed_useragent desaparecerá:

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
// Check for selector availability, as it is available only on iOS 9+
if ([webView respondsToSelector:@selector(setCustomUserAgent:)]) {
    webView.customUserAgent = @"MyCustomUserAgent";
}

Para alterar o User-Agent no UIWebView você pode verificar esta resposta .

Mas tenha cuidado, pois algum código de back-end pode depender User-Agent valor do cabeçalho User-Agent .


Depois que o login do Google concluir o login, use o currentUser para obter o fetcherAuthorizer , que poderá ser usado como um autorizador para o Serviço Google Drive .

Depois disso, você pode usar o Serviço Google Drive normalmente:

GIDGoogleUser *googleUser = [GIDSignIn sharedInstance].currentUser;

if(googleUser != nil){
    self.service.authorizer = googleUser.authentication.fetcherAuthorizer;
    [self listFiles];

}

Eu resolvi o problema que levou 1 ano :-) só brincando. basta adicionar a linha abaixo na preferência em config.xml

 <preference name="OverrideUserAgent" value="Mozilla/5.0 Google" /> 

Observe que resolvi esse problema de login do google com o navegador Inapp.

obrigado


Isso está funcionando para mim

<preference name="OverrideUserAgent" value="Mozilla/5.0 Google" />

No meu caso, eu estava usando o modo de exibição nativo da web para fazer login no google, descubro como você deve fornecer o agente do usuário ao modo de exibição na web em que isso funcionou para mim. Experimente o código abaixo, tenho certeza de que funcionará.

Adicione o código no aplicativo didFinishLaunchingWithOptions

Objetivo C

 NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", @"UserAgent", nil];
 [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

Swift 3.0

let dictionaty = NSDictionary(object: "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", forKey: "UserAgent" as NSCopying)
UserDefaults.standard.register(defaults: dictionaty)

Por padrão, se você não possui nenhum aplicativo do Google, o SDK do Google abre o login dentro de um UIWebView quando o iniciamos, usando o método a seguir.

        [[GIDSignIn sharedInstance] signIn];

Acabei de adicionar uma linha antes disso, que é a seguinte.

        [[GIDSignIn sharedInstance] setAllowsSignInWithWebView:NO];

Agora, o Google não autoriza o uso do pop-up UIWebView . Em vez disso, ele abre no navegador Safari. E agora tudo funciona do jeito que era.


Tenho o mesmo problema. Resolvido configurando a seguinte propriedade para o objeto de visualização na web:

webview.getSettings().setUserAgentString("Chrome/56.0.0.0 Mobile");

Espero que isso ajude.







google-oauth