2016-07-03 5 views
7

У меня в настоящее время есть бэкэнд-решение для моего приложения с использованием Azure Mobile Apps. Я включил логин, твиттер, google и Microsoft. Кроме того, я пытаюсь добавить пользовательский логин. У меня установлена ​​учетная запись и приложение Auth0, и я могу получить токен и профиль обратно из auth0, когда я делаю запрос в приложении с помощью виджета блокировки auth0.Пользовательская аутентификация Azure для мобильных приложений с Cordova

Я следил за этим руководством: https://shellmonger.com/2016/04/08/30-days-of-zumo-v2-azure-mobile-apps-day-5-custom-authentication/ и получил этап «Пользовательская проверка JWT на сервере», но это то, где я застрял ... мой бэкэнд находится на C#, а не node.js, так как я могу сделать эквивалент этот учебник и проверить токен JWT, а затем получить доступ к контроллерам таблиц из моего внешнего приложения, используя azureClient.login/azureClient.table?

EDIT: Хорошо, так как вы будете видеть в комментариях ниже нить с @AdrianHall я был успешным в создании маркер из моей Cordova приложения, но мой камень преткновения теперь получает услугу, чтобы принять его без необходимости обменные токены. Это возможно в соответствии с опубликованным руководством.

Это мой код на стороне клиента, который в настоящее время делает auth-вызов auth0 и создает некоторую клиентскую сторону для получения идентификатора пользователя и генерирует объект currentUser, содержащий новый токен.

auth0.lock.show(auth0.options, function(err, profile, token) { 
    if (err) { 
    console.error('Error authenticating with Auth0: ', err); 
    alert(err); 
    } else { 
    debugger; 
    var userID; 
    if (profile.user_id.indexOf("auth0") > -1) { 
     userID = profile.user_id.replace("auth0|", ""); 
    } else if (profile.user_id.indexOf("facebook") > -1) { 
     userID = profile.user_id.replace("facebook|", ""); 
    } else if (profile.user_id.indexOf("twitter") > -1) { 
     userID = profile.user_id.replace("twitter|", ""); 
    } else if (profile.user_id.indexOf("microsoft") > -1) { 
     userID = profile.user_id.replace("microsoft|", ""); 
    } else if (profile.user_id.indexOf("google-oauth2") > -1) { 
     userID = profile.user_id.replace("google-oauth2|", ""); 
    } 
    window.azureClient.currentUser = { 
     userId: userID, 
     profile: profile, 
     mobileServiceAuthenticationToken: token 
    }; 

    //A client session has now been created which contains attributes relevant to the currently logged in user. 

    console.log("window.azureClient.currentUser", window.azureClient.currentUser); 
    window.localStorage.setItem("currentUser", JSON.stringify(window.azureClient.currentUser)); 
    //Call the get profile function which will call our API to get the user's activities and bio etc. 
    getProfile(); 
    } 

код Backend MobileAppSettingsDictionary

settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings(); 

     if (string.IsNullOrEmpty(settings.HostName)) 
     { 
      //This middleware is intended to be used locally for debugging.By default, HostName will 

      //only have a value when running in an App Service application. 
      app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions 
      { 
       SigningKey = ConfigurationManager.AppSettings[""], 
       ValidAudiences = new[] { ConfigurationManager.AppSettings[""] }, 
       ValidIssuers = new[] { ConfigurationManager.AppSettings["https://domain.eu.auth0.com/"] }, 
       TokenHandler = config.GetAppServiceTokenHandler() 
      }); 
     } 
+0

Благодарим за редактирование. Стыдно, что вы не могли бы дать ответ за щедрость. – anthonyhumphreys

ответ

5

В # бэкэнде Azure Mobile Apps C, есть App_Start\Startup.Mobile.cs файл со следующим кодом:

MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings(); 

    if (string.IsNullOrEmpty(settings.HostName)) 
    { 
     // This middleware is intended to be used locally for debugging. By default, HostName will 
     // only have a value when running in an App Service application. 
     app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions 
     { 
      SigningKey = ConfigurationManager.AppSettings["SigningKey"], 
      ValidAudiences = new[] { ConfigurationManager.AppSettings["ValidAudience"] }, 
      ValidIssuers = new[] { ConfigurationManager.AppSettings["ValidIssuer"] }, 
      TokenHandler = config.GetAppServiceTokenHandler() 
     }); 
    } 

app.UseAppServiceAuthentication вызова устанавливает конфигурацию необходимых для декодирования вашего JWT. Вам просто нужно понять, что ваша Аудитория (поле аудита в JWT) и Эмитент (поле iss в JWT). В случае auth0, Audience Ваш ClientId и Эмитент «https://your-domain-value» - Клиент Секрет подписания ключ

Вы можете проверить пример JWT с помощью вырезания и вставки в https://jwt.io - это покажет явно, что должно значения быть и позволить вам проверить подпись.

+0

О, ничего себе сам. Большое вам спасибо за ваш блог - это большой плюс для сообщества :) Я посмотрю, что вы сказали завтра. Благодарим вас за помощь. – anthonyhumphreys

+0

Еще один вопрос: какой вызов я должен делать с передней стороны до лазурного разрешения? – anthonyhumphreys

+1

@anthonyhumphreys См. [Добавить аутентификацию в приложение Apache Cordova] (https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-cordova-get-started-users/). –

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