使用Azure App Services - Azure AD B2 - MobileServiceClient - 身份验证失败

时间:2018-05-30 23:04:44

标签: azure azure-web-sites azure-mobile-services azure-functions azure-ad-b2c

我将App Services设置为使用Active Directory B2C进行身份验证和授权。如果我直接通过网址https:// {myfunctionapp} .azurewebsites.com / .auth / login / aad登录,我会被路由到登录/注册页面,所有内容似乎都运行正常。

我定义了以下函数,由网页上的链接调用。调用该函数后,它将返回' 错误:您无权查看此目录或页面。'

function callEmailLogin() {
    var functionAppBaseUrl = 'https://<myfunctionapp>.azurewebsites.com';
    var mobileClient = new WindowsAzure.MobileServiceClient(functionAppBaseUrl);

    mobileClient.login('aad', {'access_token': '<what goes here?>'})
    .done(function (results) {
         log('You are now logged in as: ' + results.userId);
         emailLink.innerText = 'Sign-out';   
    }, function (err) {
         log(err);
         emailLink.innerText = 'Sign-in/Sign-up';
    });
}

我跟随Chris Gillum在这里发帖,用App Services设置ADB2C https://blogs.msdn.microsoft.com/appserviceteam/2016/06/22/app-service-auth-and-azure-ad-b2c/

我按照Stuart Leek的帖子创建了简单的网络客户端,但代码中没有AAD示例,而且效果不佳 https://blogs.msdn.microsoft.com/stuartleeks/2018/02/19/azure-functions-and-app-service-authentication/

我不确定&#39; access_token &#39;的登录呼叫中有什么内容,我认为它是AAD Advanced中设置的客户端ID设置,它是AD-B2C目录应用程序设置中的应用程序ID。

Here is the App Service AD config Here is the App config in AD B2C

1 个答案:

答案 0 :(得分:0)

我发现了我的答案,我太过刻苦了。

我发现您不需要将 access_token 发送给aad EasyAuth提供商。修改如下,它的工作原理!

function callEmailLogin() {
    mobileClient.login('aad')
    .done(function (results) {
         log('You are now logged in as: ' + results.userId);
         emailLink.innerText = 'Sign-out';
    }, function (err) {
         log(err);
         emailLink.innerText = 'Sign-in/Sign-up';
    });
}

有一个问题,它没有将电子邮件声明返回为&#34; typ&#34;:&#34; http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress&#34;,它将其返回为& #34;典型值&#34;:&#34;电子邮件&#34 ;.我只是快速解决这个问题,但有人知道电子邮件声称是非标准的吗?