1

我正在尝试将 EasyAuth (aad) 与目前位于“localhost:8080”上的 SPA 以及托管在 Azure 中的 Azure Function ({function-app}.azurewebsites.net。目的是为了SPA 调用 Azure 函数上的安全端点。因此,我将 Azure 函数注册为 AD 中的应用程序,并且 SPA 中的身份验证重定向到 Azure 函数 EasyAuth 端点似乎正在工作,但重定向回post_login_redirect_url不是通过 localhost SPA 。

我将http://localhost:8080作为允许的重定向 URI 添加到 AAD 注册应用程序中。但是,如果我完全限定了我被重定向回的 URL {function-host}/.auth/login/done。是否期望 SPA 在与 azure 函数相同的主机名下运行,或者有没有办法配置设置以允许 SPA 主机的任何 URL?

行为

就行为期间的 HTTP 数据而言,一旦登录成功.auth/login/aad/callback,在重定向到默认完成页面并停止之前加载以下内容。

  • 响应头
    • Location= {function-host} /.auth/login/done
  • 表格数据:
    • state= http://localhost:8080
    • code= 授权码
    • id_token= 授权令牌

我如何从 SPA 中调用它

function processAuthCheck(xmlhttp) {
    if (xmlhttp.status == 401) {
        url = "https://{function-app}.azurewebsites.net/.auth/login/aad?"
        + "post_login_redirect_url=" + encodeURI("http://localhost:8080");
        window.location = url;
    } else if (xmlhttp.status != 200) {
        alert("There is an error with this service!");
        return;
    }
    var result = JSON.parse(xmlhttp.responseText);
    console.log(JSON.stringify(result));
    return;
};
4

1 回答 1

1

关于这个问题,请参考以下步骤

  1. 注册 Azure AD 应用程序以通过简单身份验证保护 azure 功能

  2. 注册客户端应用程序

    一个。注册单页应用

    湾。在隐式授权和混合流部分中,选择ID 令牌访问令牌

    C。配置 API 权限

  3. 在 Azure 函数中启用 CORS

  4. 代码

    一个。将 Azure AD 身份验证与隐式授权流集成到您的 spa 应用程序中。之后,当用户访问您的应用程序时,他们需要输入他们的 AD 帐户以获取访问令牌

    湾。客户端将此交换accessToken为“应用服务令牌”。它通过https://{app}.azurewebsites.net/.auth/login/aad对内容进行 POST 来做到这一点{ "access_token" : "{token from Azure AD}" }。这将返回一个authenticationToken

    C。在authenticationToken名为x-zumo-auth. 使用该标头向您的函数应用发出所有请求。

更多详情,请参阅此处此处。关于如何在 spa 中实现 Azure AD,请参考这里

于 2021-04-26T02:45:14.713 回答