Autenticar em um Aplicativo de Serviço Móvel do Azure com o token adquirido ADAL.js.

Estou tentando autenticar um aplicativo HTML em um aplicativo do Serviço Móvel do Azure.

A configuração

Ambos os aplicativos usam o AAD como back-end de autenticação; portanto, ambos têm um aplicativo registrado no Active Directory:

Aplicativo Serviço Móvel do Azure:

configurado conforme descrito emhttps://azure.microsoft.com/en-gb/documentation/articles/mobile-services-how-to-register-active-directory-authentication/Editei o manifesto para ativar o fluxo do clienteHabilite "logon único e leia perfis de usuários" em "permissões para outros aplicativos" para "Windows Azure Active Directory"

Aplicativo HTML:

em "permissões para outros aplicativos", adicionei o aplicativo do Serviço Móvel do Azure com a permissão delegada "acesso"

O Serviço Móvel do Azure usa um back-end do .NET, onde incluí e configurei o Pacote NuGet "Extensão de Segurança de Back-end do .NET dos Serviços Móveis do Microsoft Azure", conforme descrito emhttps://azure.microsoft.com/en-gb/documentation/articles/mobile-services-dotnet-backend-windows-phone-get-started-users/

O aplicativo HTML usa ADAL.JS e Angular:

adalAuthenticationServiceProvider.init(
{
    // Config to specify endpoints and similar for your app
    clientId: "<html app aad client id>",
    redirectUri: "<html app redirect uri>",
    endpoints: {
        '<AMS app client id>': 'https://ampapp.azure-mobile.net/'
    }
},
$httpProvider
);

Essa configuração funciona conforme o esperado, abro meu aplicativo html, autentico no Azure AD, redireciono para meu aplicativo e estou logado. Além disso, quando tento acessar meu Serviço Móvel do Azure, vejo que o Adal.js injeta o portador símbolo.

O problema

O token do portador não é aceito pelo Serviço Móvel do Azure - recebo um 401 não autorizado. Não sei por que, mas o Serviço Móvel do Azure usa seu próprio cabeçalho de autenticação - mas tudo bem.

O MSDN define a chamada "operação de logon direcionada ao cliente" para o Serviço Móvel do Azure:

"Solicita um token de autenticação do Microsoft Azure Mobile Services usando um token de identidade já obtido de um provedor de identidade." (https://msdn.microsoft.com/en-us/library/azure/jj710106.aspx)

Ok, então vamos fazer o seguinte:

 // obtain token for Azure Mobile Service from Adal.js
 var token = this.getAADToken(ZUMOAuthenticationProvider.Config().url);

 $http({
        method: 'POST',
        url: ZUMOAuthenticationProvider.Config().url + 'login/aad', 
        data: JSON.stringify({
                  "access_token" : token 
              }),
        headers: {
                 'X-ZUMO-APPLICATION': '<application key>'
       }).
       success(function (data, status, headers, config) {
            alert(data);
       }).
       error(function (data, status, headers, config) {
            alert(data);
       }); 

Nota: O token adquirido pela primeira linha é realmente o token de acesso para o aplicativo azad mobile service aad e não para o aplicativo HTML.

Essa solicitação POST também recebe uma resposta 401. Portanto, não sei como autenticar meu aplicativo. Também tentei o serviço móvel azure js lib. Essa lib funciona, mas usa um pop-up para autenticação, mas não gosto de adicionar outra biblioteca aos meus projetos para apenas algumas chamadas REST.

Problemas semelhantes

Ao tentar resolver meus problemas, encontrei outro post do Stackoverflow:

Por que meu Serviço Móvel do Azure não está aceitando o token de portador que o ADAL.js está enviando?

mesmo problema, sem solução (mesmo no blog vinculado no último comentário)

Como faço para proteger um Serviço Móvel do Azure com o Azure AD? ADAL.JS

mesmo autor acima, verifiquei tudo mencionado na resposta aceita, mas não funciona

Também examinei os novos aplicativos móveis do Azure no novo portal de gerenciamento do Azure, mas parece que eles estão usando o mesmo mecanismo de autenticação.

Então, como posso fazer isso funcionar?

questionAnswers(3)

yourAnswerToTheQuestion