aaronpowell / FSharp.CosmosDb

An F# wrapper around Cosmos DB's .NET SDK to make it more friendly for F# developers
MIT License
79 stars 12 forks source link

Feature req: identity-based connection #73

Open kumkee opened 11 months ago

kumkee commented 11 months ago

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 commented 11 months ago

@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.

aaronpowell commented 11 months ago

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.

kumkee commented 11 months ago

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?
fwaris commented 6 months ago

looking for the same capability

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

kumkee commented 6 months ago

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.

fwaris commented 6 months ago

ok great. thanks!

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