0

Я перешел из Azure Mobile Service в службу поддержки приложений, но мне трудно понять, как лучше всего реализовать расширенный авторизатор Facebook.Azure App Service Facebook

В моей старой реализации я унаследовал от FacebookLoginProvider и достал токен из формулы. Затем я добавил CustomFacebookLoginProvider своим провайдерам входа. Затем я использую токен, чтобы получить дополнительную информацию о пользователе (дата рождения, друзья и пол). С помощью этой информации я создал объект пользователя и сохранил его в моей БД.

Есть ли у кого-нибудь предложения о том, как лучше всего воссоздать это в службе App, поскольку я не могу найти никакой документации.

ответ

0

Единственное изменение, которое я должен был внести при переключении с Mobile Service на Mobile App, заключалось в том, чтобы изменить конец URL-адреса обратного вызова на портале разработчиков, чтобы использовать /.auth/login/facebook/callback вместо/signin-facebook и он работал точно так же, как и раньше.

Обратите внимание, что это приложение для Windows с бэкэндом .NET; вы не указали, что используете, поэтому ваш пробег может отличаться.

+0

Этот подход работает так, как ожидалось, но у меня нет способа получить токен Facebook, чтобы запросить Facebook для получения дополнительной информации о пользователе. –

+0

С какой платформой/бэкэнд вы работаете? –

+0

iOS, но клиент не должен иметь значения, поскольку это должно происходить на бэкэнде. –

1

Насколько, как настроить проверку подлинности на Facebook, вы можете найти документацию здесь (и это звучит, как вы уже поняли, это много):

https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-how-to-configure-facebook-authentication/

Теперь, когда проверка подлинности Facebook устанавливается , вы можете обратиться к следующему, который показывает, как получить информацию о пользователе:

https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-dotnet-backend-how-to-use-server-sdk/#user-info

// Get the credentials for the logged-in user. 
var credentials = 
    await this.User 
    .GetAppServiceIdentityAsync<FacebookCredentials>(this.Request); 

if (credentials.Provider == "Facebook") 
{ 
    // Create a query string with the Facebook access token. 
    var fbRequestUrl = "https://graph.facebook.com/me?access_token=" 
     + credentials.AccessToken; 

    // Create an HttpClient request. 
    using (var client = new System.Net.Http.HttpClient()) 
    { 
     // Request the current user info from Facebook. 
     using (var resp = await client.GetAsync(fbRequestUrl)) 
     { 
      resp.EnsureSuccessStatusCode(); 

      // Do something here with the Facebook user information. 
      var fbInfo = await resp.Content.ReadAsStringAsync(); 
     } 
    } 
} 

Обратите внимание, что вы должны добавить , используя заявление для System.Security.Principal, чтобы сделать GetAppServiceIdentityAsync метод расширения.

Для получения дополнительной информации о том, какие пользовательские свойства Facebook вы можете запросить, см. Документацию на Facebook: https://developers.facebook.com/docs/graph-api/reference/user. Обратите внимание, что вам может потребоваться указать, какие пользовательские свойства вы хотите, в качестве дополнительных полей параметра запроса при вызове на график Facebook.

+0

У меня есть blogpost на этом здесь: https://blogs.msdn.microsoft.com/kaushal/2017/06/08/using-easy-auth-to-query-facebook-information-via-graph-api / –

0

Я использовал следующий подход для получения токена доступа Facebook в приложении iOS.

Службы App включают токен доступа Facebook в заголовок запроса, см. https://azure.microsoft.com/en-in/documentation/articles/app-service-api-authentication/.

Чтобы получить доступ к токену доступа, создайте пользовательский API на портале Azure, например. facebookUserInfo со следующим кодом:

module.exports = { 
"get": function (request, response, next) { 
    response.send(200, { facebookAccessToken: request.headers['x-ms-token-facebook-access-token'] }); 
}};   

В приложении IOS, используйте следующий код для запроса пользовательского API:

let client = self.table!.client 
    if client.currentUser != nil { 
     client.invokeAPI("facebookUserInfo", body: nil, HTTPMethod: "GET", parameters: nil, headers: nil, completion: { (result, response, error) -> Void in 
      if let resultDict = result { 
       if let facebookAccessToken = resultDict["facebookAccessToken"]! { 
        print(facebookAccessToken) 
       } 
      } 
     } 
    } 
0

С помощью функции Easy Auth Лазурного App Services, я не нуждаюсь беспокоиться об аутентификации. У меня есть блогпост об этом. Я объяснил, как мы можем использовать FB GraphApi для запроса данных FB. Вот ссылка: https://blogs.msdn.microsoft.com/kaushal/2017/06/08/using-easy-auth-to-query-facebook-information-via-graph-api/

У меня есть пример кода, развернутого на Github.Вот ссылка: https://github.com/kaushalp/Facebook-GraphApi-with-EasyAuth

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