当前位置: 首页 > 知识库问答 >
问题:

Azure函数:在Cosmos DB绑定中使用用户

伯和蔼
2023-03-14

共有1个答案

高自怡
2023-03-14

这篇文章提供了如何在CosmosDB中处理用户和权限的详细描述,甚至是一个示例。

或者,如果您只想从接收到的令牌中获取oid,并将其用作分区键,那么我会采用如下所示的方法,然后根据值创建查询。

Azure Functions v3.NET Core 3.1的安装程序(Nuget):

<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.8" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.9" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.CosmosDB" Version="3.0.7" />
    [FunctionName("CosmosDBAccess")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            [CosmosDB(ConnectionStringSetting = "CosmosDBConnection")]DocumentClient client,
            ILogger log)
        {
            // Get oid from your token 
            var token = string.Empty;
            var hasToken = req.Headers.TryGetValue("Authorization", out var tokenHeader);
            if (hasToken)
            {
                // Assuming token is in header as "Bearer <token>"
                token = tokenHeader[0].Split(" ")[1];
            }
            var handler = new JwtSecurityTokenHandler();
            var tokenS = handler.ReadToken(token) as JwtSecurityToken;
            var jti = tokenS.Claims.First(claim => claim.Type == "oid").Value;

            // Create query
            var uri = UriFactory.CreateDocumentCollectionUri("db", "collection");
            using (var query = client.CreateDocumentQuery(uri, 
                new FeedOptions() { PartitionKey = new Microsoft.Azure.Documents.PartitionKey(jti) })
                .AsDocumentQuery())
            {
                while (query.HasMoreResults)
                {
                    // Get results
                    FeedResponse<Document> recordSet = await query.ExecuteNextAsync<Document>();
                }
            }

            // more stuff
module.exports = async function (context, req) {
    
    const { CosmosClient } = require("@azure/cosmos");
    const endpoint = "<your-cosmosdb-connection>";
    const key = "<your-key>"
    const client = new CosmosClient({ endpoint, key });

    var results = []

    async function main() {
        // Get oid
        var oid = req.headers.authorization.split(" ")[1]
        console.log(oid)

        // Get Database 
        const { database } = await client.databases.createIfNotExists({ id: "db" });
        console.log(database.id);
        
        // Get Collection
        const { container } = await database.containers.createIfNotExists({ id: "collection" });
        console.log(container.id);

        // Query items
        const { resources } = await container.items
            .query("SELECT * from c", { partitionKey: oid })
            .fetchAll();
        
        for (var r of resources)
        {
            results.push(r)
            console.log(r.id)
        }
    }

    main().catch((error) => {
        console.error(error);
    });

    await main()

    // Return response
    context.res = {
        // status: 200, /* Defaults to 200 */
        body: results
    };
}
 类似资料:
  • 下面是我的function.json 有什么想法可以摆脱这个“exception:attributeError:module'azure.functions'没有属性'in'”错误吗?

  • 我制作了一个Azure函数(http触发器),并使用Visual Studio 2019将其部署在门户中。 该函数工作正常,我现在将添加一个绑定到我的CosmosDB。我导航到我的函数,然后单击“集成”。现在我看到了触发器、函数以及输入和输出绑定。 我应该可以在这里添加一个新的输入绑定。但我没有“添加”按钮。我做错了什么?

  • 我对Azure函数和CosmosDB输出绑定有问题。我现在拥有的是:我从一个Cosmos DB容器中读取数据,处理一些东西,然后将结果输出回同一个DB但不同的容器。我正在使用VSCode和python,并测试了其他输出(blob、HTTP响应等),所有这些都正常工作,所以我认为这是CosmosDB的问题。 主要功能定义如下: function.json输出绑定如下: 请注意,我使用和我的扩展手动安

  • 我一直在寻找一种技术,使用浏览器中的代码编辑器,使用Azure函数删除Cosmos数据库中的项目。我不想在VS上使用本地开发的代码,原因有很多。 这里提供了我使用的代码,我使用的是带有CosmosDB输入和输出绑定的HttpTrigger。它们的名称非常明显(inputDocument,outputDocument)。 这段代码在从db读取项目和编写新文档方面工作得非常好,但是我希望能够删除单个项

  • 我在CosmosDB中有两个集合,和。 集合保存所有历史价格,并不断更新。 我想创建一个Azure函数,它监听< code>StockPrices更新(< code>CosmosDBTrigger),然后对触发器传递的每个< code >文档执行以下操作: 在集合中查找具有匹配代码的股票 在集合中更新股票价格 我不能用<code>CosmosDB(绑定仅在触发器传递单个项时有效)。 我看到它工作的

  • 我对Typescript和CosmosDB是新手,这可能是一个相当愚蠢的问题,然而,我在网上搜索了一整天,也找不到适合我的解决方案。希望有人愿意帮忙。 select似乎不是typescript中定义的函数,有人能帮忙吗?