FSharp.CosmosDb icon indicating copy to clipboard operation
FSharp.CosmosDb copied to clipboard

Feature req: identity-based connection

Open kumkee opened this issue 2 years ago • 6 comments

Do you only support Connection-String connections?

Please add support for identity-based connection.

In the upstream, this is done using the DefaultAzureCredential class provided by the Azure.Identity client library.

This would be a function called Cosmos.fromCredential which works like

open Microsoft.Azure.Cosmos
open Azure.Identity
open FSharp.CosmosDb

let credential = new DefaultAzureCredential()

let insertUsers data =
    credential 
    |> Cosmos.fromCredential
    |> Cosmos.database "UserDb"
    |> Cosmos.container "UserContainer"
    |> Cosmos.insertMany<User> data
    |> Cosmos.execAsync

Many thanks.

kumkee avatar Nov 29 '23 17:11 kumkee

@aaronpowell, I'd like to contribute and make identity-based connections a reality if no one has the time. To achieve that, I'll need to communicate with you and/or other authors of the library first. This is because it is going to change a major type, ConnectionOperation and I don't want to waste time onto the wrong direction.

My idea for the implementation is to add a new boolean member WithIdenty to type ConnectionOperation. When it is false the type would work as what it does now. When it is true, it is connecting using endpoint and the identity provided by DefaultAzureCredential().

The next step after DefaultAzureCredential() would be adding an option for the user to specify which identity to use with DefaultAzureCredentialOptions.

@aaronpowell, please let me know what you think especially whether these implementation ideas are too intrusive to the existing codebase.

Thank you.

kumkee avatar Dec 04 '23 08:12 kumkee

The change is probably not that huge, it'd just be adding another two properties to the ConnectionOperation type and having an expanded match on what the connection mode should be when creating the CosmosClient.

In the future, maybe it'd be better to refactor to use the AzureKeyCredential but I'd have to check to ensure the constructor for CosmosClient works with it.

Submit a PR and I'll review and we can iterate as needed.

aaronpowell avatar Dec 04 '23 22:12 aaronpowell

Submit a PR and I'll review and we can iterate as needed.

Hi @aaronpowell,

  1. CI build process failed. I see this happens to your one other GitHub Action build attempt. Have you found out why it failed?
  2. Can you give me some light on how to test or install the locally built library?

kumkee avatar Dec 06 '23 07:12 kumkee

looking for the same capability

I tried to build it myself also but I think the build tooling needs to be updated, first

fwaris avatar Apr 25 '24 22:04 fwaris

looking for the same capability

I tried to build it myself also but I think the build tooling needs to be updated, first

@fwaris, if you don't use the Analyzer, you can use my build for now.

kumkee avatar Apr 25 '24 22:04 kumkee

ok great. thanks!

BTW I was able to build by updating dotnet tools and using a global.json for .Net 6

fwaris avatar Apr 25 '24 22:04 fwaris