Azure 静态 Web 应用程序身份验证回调?

问题描述 投票:0回答:1

我正在使用 Azure 静态 Web 应用的内置自定义身份验证(又名 Easy Auth)。 我想在身份验证后更新用户表。 是否有任何在身份验证后触发的内置事件可以为此目的挂钩?

我目前只能想到一个解决方法:

  1. 使用 post_login_redirect_uri 参数重定向用户发布身份验证 手动捕获事件。
  2. 然后从客户端调用 .auth/me 端点,然后将其发送回 api 端点以存储在数据库中。
  3. 然后将用户重定向回其他登录后重定向(可能存储在 cookie 或其他内容中)。

显然,从代码库复杂性(额外的页面和额外的查询字符串参数)、用户体验(额外的重定向)和处理效率的角度(简单地将令牌存储中已有的内容传递回服务器)来看,上述内容并不是最优的。

我记得使用 OIDC 身份验证时,有一个针对 ASP.Net Core 的 OnTokenReceived 回调。 静态网络应用程序是否有类似的功能?

azure-static-web-app easy-auth
1个回答
0
投票

是的,您可以使用内置功能来管理授权请参阅此处的文档在“管理角色”->“功能(预览)”选项卡下。

它允许您通过将其添加到配置文件中来选择 api 端点,您将看到这些文档是否

{
  "auth": {
    "rolesSource": "/api/GetRoles",
    "identityProviders": {
      // ...
    }
  }
}

在成功进行身份验证后,将调用 api,并传入 /.auth/me 响应对象的 clientPrincipal 对象。您的 api 需要返回您想要为用户提供的任何角色,但您可以执行您需要执行的任何其他操作函数中还有该用户的信息。我使用了托管的 Azure 功能,它运行得很好。

我发现这篇博文对于使用 Entra ID 和 Azure 安全组进行角色设置自定义身份验证和授权非常有帮助。 https://johschmidt42.medium.com/role-based-access-control-with-app-roles-in-azure-static-web-apps-f6525d1b7d92

这是我的 GetRoles 函数的内容,如果有用的话:

const { app } = require('@azure/functions');

app.http('GetRoles', {
    methods: ['POST', 'GET'],
    authLevel: 'anonymous',
    handler: async (request, context) => {
        const user = await request.json();
        const roles = [];
        
        if (user.identityProvider == 'google') {
            roles.push('externalvendor');
        } 
        else if (user.identityProvider == 'aad') {
            for (const claim of Object.entries(user.claims)) {
                if (claim[1].typ == 'roles' || claim[1].typ == "http://schemas.microsoft.com/ws/2008/06/identity/claims/role") {
                    roles.push(claim[1].val);
                }
            }
        }
        
        return {
            jsonBody: {"roles": roles},
            headers: {
                'Content-Type': 'application/json'
            }
        };
    }
})
© www.soinside.com 2019 - 2024. All rights reserved.