У меня следующая ситуация:
В настоящее время я пытаюсь написать приложение в стиле Metro, позволяющее пользователю входить в свою учетную запись Google, а приложение запрашивает несколько разрешений, таких как Userinfo.profile и Userinfo.email.
Для этого я в настоящее время использую OAuthv2, и запрос подробностей сработал нормально (после некоторых усилий и исследований).
Используемый URL:
const string url = "https://accounts.google.com/o/oauth2/auth?" +
"client_id=" + clientId +
"&redirect_uri=" + "urn:ietf:wg:oauth:2.0:oob" +
"&response_type=code" +
"&scope=https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email" +
"&access_type=offline";
Теперь проблема в том, что если я хочу, чтобы пользователь оставался аутентифицированным, мне нужно было либо сохранить токен на стороне клиента пользователем, либо найти какой-то способ войти в систему с помощью Google, сохранить сеанс и проверить, если он аутентифицирован.
Проблема в том, что я не знаю, как выполнить последнее, и понятия не имею, как его использовать. На данный момент, каждый раз, когда я открываю приложение, пользователь перенаправляется на страницу авторизации google, где вся процедура начинается снова и снова при каждом перезапуске.
Что я хочу сделать, так это то, что если пользователь входит в систему, у меня есть способ идентифицировать его и не всегда возлагать на него бремя, повторно запрашивая разрешения для данных деталей.
Я просмотрел OpenID, но всегда получаю
<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
<XRD>
<Service priority="0">
<Type>http://specs.openid.net/auth/2.0/server</Type>
<Type>http://openid.net/srv/ax/1.0</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/mode/popup</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/icon</Type>
<Type>http://specs.openid.net/extensions/pape/1.0</Type>
<URI>https://www.google.com/accounts/o8/ud</URI>
</Service>
</XRD>
</xrds:XRDS>
В ответ на этот URL:
https://www.google.com/accounts/o8/id?openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&openid.return_to=urn:ietf:wg:oauth:2.0:oob&openid.ns.ui=http://specs.openid.net/extensions/ui/1.0&openid.ns.ax=http://openid.net/srv/ax/1.0&openid.ax.mode=fetch_request&openid.ax.required=email,firstname,language,lastname,country&openid.ns.ext=http://specs.openid.net/extensions/oauth/1.0&openid.ext2.consumer=https://www.google.com/accounts/o8/ud?openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&openid.return_to=urn:ietf:wg:oauth:2.0:oob&openid.ext2.scope=https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email
Я неправильно строю?
Если есть какие-либо предложения о том, как выполнить это «правильно», чего я пытаюсь достичь (интеграция с Google, разрешение пользователю входить в систему с использованием электронной почты Google и только strong> если он не авторизовал приложение, попросите его сделать это, а также узнайте, кто он такой при входе в систему во второй+ раз), или как я могу это сделать, пожалуйста не стесняйтесь.
Кроме того, используя урезанную версию платформы .Net 4.5, похоже, я не могу использовать библиотеки OpenID, поскольку они полагаются на полную версию 4.5.
*Изменить* Просмотр MSDN появляется:
To support SSO, the online provider must allow you to register a redirect URI in the form ms-app://appSID, where appSID is the SID for your app.
Значит ли это, что это просто невозможно? Потому что в Google я могу запросить ключ только для домена с http(s)://
?