Я пытаюсь опубликовать sereval значения области, чтобы разрешить моему приложению работать с каким-либо сервисом Google ...
Я пытался использовать два поля ввода
<input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar" /> <input type="hidden" name="scope" value="https://www.googleapis.com/auth/userinfo.email" />
и одно поле ввода с разделителем +
<input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar+https://www.googleapis.com/auth/userinfo.email" />
Когда я отправляю свою форму только с одной областью, это работает.в противном случае со значением sereval scope Google перенаправит меня с описанием ошибки:
http://localhost:49972/redirect.aspx#error=invalid_request&error_description=OAuth+2+parameters+can+only+have+a+single+value:+scope&error_uri=http://code.google.com/apis/accounts/docs/OAuth2.html
В google Getting Started с oAuth2 он работает с двумя значениями scope.
Вот мой код:
<form id="form1" method="post" action="https://accounts.google.com/o/oauth2/auth?" > <div> <input type="hidden" name="response_type" value="code" /> <input type="hidden" name="client_id" value="my client id" /> <input type="hidden" name="redirect_uri" value="http://localhost:49972/redirect.aspx" /> <input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar" /> <input type="hidden" name="scope" value="https://www.googleapis.com/auth/userinfo.email" /> <input type="hidden" name="state" value="/profile" /> <input type="submit" value="go" /> </div> </form>
Вы были на правильном пути, когда вы объединили их в одно поле.В запросе должен быть только один параметр области, значения которого должны быть разделены пробелами.Если вы поместите его в такую форму, браузер позаботится о кодировании пространства для вас.
<input type="hidden" name="scope" value="https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/userinfo.email" />
В дополнение к ответу Стива Базила. При применении нескольких областей для одного и того же сервиса Google порядок областей видимости имеет значение. F.e эта строка работает как ожидалось:
"https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.metadata.readonly"
пока этот не работает для меня:
"https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/drive"
Я не нашел никакой информации об этом в документации.