@@ -532,255 +532,10 @@ You can set this option in two ways: by passing an argument to the
532
532
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS"
533
533
client = pymongo.MongoClient(uri)
534
534
535
- .. _pymongo-mongodb-oidc:
536
-
537
- MONGODB-OIDC
538
- ------------
539
-
540
- .. important::
541
-
542
- The MONGODB-OIDC authentication mechanism requires MongoDB v7.0 or later running
543
- on a Linux platform.
544
-
545
- {+driver-short+} supports OIDC authentication for **workload identities**. A workload
546
- identity is an identity you assign to a software workload, such as an application,
547
- service, script, or container, to authenticate and access other services and resources.
548
-
549
- The following sections describe how to use the MONGODB-OIDC authentication mechanism to
550
- authenticate to various platforms.
551
-
552
- For more information about the MONGODB-OIDC authentication mechanism, see
553
- :manual:`OpenID Connect Authentication </core/security-oidc/>` in the MongoDB Server
554
- manual.
555
-
556
- .. _pymongo-mongodb-oidc-azure-imds:
557
-
558
- Azure IMDS
559
- ~~~~~~~~~~
560
-
561
- If your application runs on an Azure VM, or otherwise uses the
562
- `Azure Instance Metadata Service <https://learn.microsoft.com/en-us/azure/virtual-machines/instance-metadata-service>`__
563
- (IMDS), you can authenticate to MongoDB by using {+driver-short+}'s built-in Azure
564
- support.
565
-
566
- You can configure OIDC for Azure IMDS in two ways: by passing arguments to the
567
- ``MongoClient`` constructor or through parameters in your connection string.
568
-
569
- .. tabs::
570
-
571
- .. tab:: MongoClient
572
- :tabid: mongoclient
573
-
574
- First, create a Python dictionary for your authentication mechanism properties, as shown
575
- in the following example. Replace the ``<audience>`` placeholder with
576
- the percent-encoded application or service that the OIDC access token is intended for.
577
-
578
- .. literalinclude:: /includes/authentication/azure-imds-mongoclient.py
579
- :language: python
580
- :copyable: true
581
- :start-after: # define properties and MongoClient
582
- :end-before: client = MongoClient(
583
-
584
- Then, set the following connection options:
585
-
586
- - ``username``: The client ID of the Azure managed identity.
587
- - ``authMechanism``: Set to ``"MONGODB-OIDC"``.
588
- - ``authMechanismProperties``: Set to the ``properties`` dictionary that you
589
- created in the previous step.
590
-
591
- The following code example shows how to set these options when creating a
592
- ``MongoClient``:
593
-
594
- .. literalinclude:: /includes/authentication/azure-imds-mongoclient.py
595
- :language: python
596
- :copyable: true
597
- :emphasize-lines: 5-10
598
-
599
- .. tab:: Connection String
600
- :tabid: connectionstring
601
-
602
- Include the following connection options in your connection string:
603
-
604
- - ``username``: The client ID of the Azure managed identity.
605
- - ``authMechanism``: Set to ``MONGODB-OIDC``.
606
- - ``authMechanismProperties``: Set to ``environment:azure,token_resource:<audience>``.
607
- Replace the ``<audience>`` placeholder with the percent-encoded application or
608
- service that the OIDC access token is intended for.
609
-
610
- The following code example shows how to set these options in your connection string:
611
-
612
- .. literalinclude:: /includes/authentication/azure-imds-connection-string.py
613
- :language: python
614
- :copyable: true
615
- :emphasize-lines: 4-7
616
-
617
- .. tip::
618
-
619
- If your application is running on an Azure VM, and only one managed identity is
620
- associated with the VM, you can omit the ``username`` connection option.
621
-
622
- .. _pymongo-mongodb-oidc-gcp-imds:
623
-
624
- GCP IMDS
625
- ~~~~~~~~
626
-
627
- If your application runs on a GCP VM, or otherwise uses the
628
- `GCP Instance Metadata Service <https://cloud.google.com/compute/docs/metadata/querying-metadata>`__,
629
- you can authenticate to MongoDB by using {+driver-short+}'s built-in GCP
630
- support.
631
-
632
- You can configure OIDC for GCP IMDS in two ways: by passing arguments to the
633
- ``MongoClient`` constructor or through parameters in your connection string.
634
-
635
- .. tabs::
636
-
637
- .. tab:: MongoClient
638
- :tabid: mongoclient
639
-
640
- First, create a Python dictionary for your authentication mechanism properties, as shown
641
- in the following example. Replace the ``<audience>`` placeholder with
642
- the percent-encoded application or service that the OIDC access token is intended for.
643
-
644
- .. literalinclude:: /includes/authentication/gcp-imds-mongoclient.py
645
- :language: python
646
- :copyable: true
647
- :start-after: # define properties and MongoClient
648
- :end-before: client = MongoClient(
649
-
650
- Then, set the following connection options:
651
-
652
- - ``username``: The client ID of the GCP managed identity.
653
- - ``authMechanism``: Set to ``"MONGODB-OIDC"``.
654
- - ``authMechanismProperties``: Set to the ``properties`` dictionary that you
655
- created in the previous step.
656
-
657
- The following code example shows how to set these options when creating a
658
- ``MongoClient``:
659
-
660
- .. literalinclude:: /includes/authentication/gcp-imds-mongoclient.py
661
- :language: python
662
- :copyable: true
663
- :emphasize-lines: 5-10
664
-
665
- .. tab:: Connection String
666
- :tabid: connectionstring
667
-
668
- Include the following connection options in your connection string:
669
-
670
- - ``username``: The client ID of the GCP managed identity.
671
- - ``authMechanism``: Set to ``MONGODB-OIDC``.
672
- - ``authMechanismProperties``: Set to ``environment:gcp,token_resource:<audience>``.
673
- Replace the ``<audience>`` placeholder with the percent-encoded application or
674
- service that the OIDC access token is intended for.
675
-
676
- The following code example shows how to set these options in your connection string:
677
-
678
- .. literalinclude:: /includes/authentication/gcp-imds-connection-string.py
679
- :language: python
680
- :copyable: true
681
- :emphasize-lines: 4-7
682
-
683
- .. _pymongo-mongodb-oidc-azure-envs:
684
-
685
- Other Azure Environments
686
- ~~~~~~~~~~~~~~~~~~~~~~~~
687
-
688
- If your application runs on Azure Functions, App Service Environment (ASE), or Azure
689
- Kubernetes Service (AKS), you can use the
690
- `azure-identity <https://pypi.org/project/azure-identity/>`__ package to fetch
691
- authentication credentials.
692
-
693
- First, use pip to install the ``azure-identity`` library, as shown in the
694
- following example:
695
-
696
- .. code-block:: sh
697
-
698
- python3 -m pip install azure-identity
699
-
700
- Next, define a class that inherits from the ``OIDCCallback`` class. This class must
701
- implement a ``fetch()`` method, which returns the OIDC token in the form of an
702
- ``OIDCCallbackResult`` object.
703
-
704
- The following example shows how to define a callback class named ``MyCallback``. This class
705
- includes a ``fetch()`` method that retrieves an OIDC token from a file in the standard
706
- service-account token-file location.
707
-
708
- .. literalinclude:: /includes/authentication/azure-envs-mongoclient.py
709
- :language: python
710
- :copyable: true
711
- :start-after: # define callback, properties, and MongoClient
712
- :end-before: properties = {"OIDC_CALLBACK": MyCallback()}
713
-
714
- After you define your callback class, create a Python dictionary that contains one key,
715
- ``"OIDC_CALLBACK"``, whose value is an instance of your custom callback class:
716
-
717
- .. literalinclude:: /includes/authentication/azure-envs-mongoclient.py
718
- :language: python
719
- :copyable: true
720
- :start-after: return OIDCCallbackResult(access_token=token)
721
- :end-before: client = MongoClient(
722
-
723
- Finally, set the following connection options by passing arguments to the ``MongoClient``
724
- constructor:
725
-
726
- - ``authMechanism``: Set to ``"MONGODB-OIDC"``.
727
- - ``authMechanismProperties``: Set to the ``properties`` dictionary that you created in the
728
- previous step.
729
-
730
- .. literalinclude:: /includes/authentication/azure-envs-mongoclient.py
731
- :language: python
732
- :copyable: true
733
- :emphasize-lines: 14-18
734
-
735
- .. _pymongo-mongodb-oidc-gcp-gke:
736
-
737
- GCP GKE
738
- ~~~~~~~
739
-
740
- If your application runs on a GCP Google Kubernetes Engine (GKE) cluster with a
741
- `configured service account <https://cloud.google.com/kubernetes-engine/docs/how-to/service-accounts>`__,
742
- you can read the OIDC token from the standard service-account token-file location.
743
-
744
- First, define a class that inherits from the ``OIDCCallback`` class. This class must
745
- implement a ``fetch()`` method, which returns the OIDC token in the form of an
746
- ``OIDCCallbackResult`` object.
747
-
748
- The following example shows how to define a callback class named ``MyCallback``. This class
749
- includes a ``fetch()`` method that retrieves an OIDC token from a file in the standard
750
- service-account token-file location.
751
-
752
- .. literalinclude:: /includes/authentication/gcp-gke-mongoclient.py
753
- :language: python
754
- :copyable: true
755
- :start-after: # define callback, properties, and MongoClient
756
- :end-before: properties = {"OIDC_CALLBACK": MyCallback()}
757
-
758
- After you define your callback class, create a Python dictionary that contains one key,
759
- ``"OIDC_CALLBACK"``, whose value is an instance of your custom callback class:
760
-
761
- .. literalinclude:: /includes/authentication/gcp-gke-mongoclient.py
762
- :language: python
763
- :copyable: true
764
- :start-after: return OIDCCallbackResult(access_token=token)
765
- :end-before: client = MongoClient(
766
-
767
- Finally, set the following connection options by passing arguments to the ``MongoClient``
768
- constructor:
769
-
770
- - ``authMechanism``: Set to ``"MONGODB-OIDC"``.
771
- - ``authMechanismProperties``: Set to the ``properties`` dictionary that you created
772
- in the previous step.
773
-
774
- .. literalinclude:: /includes/authentication/gcp-gke-mongoclient.py
775
- :language: python
776
- :copyable: true
777
- :emphasize-lines: 11-15
778
-
779
535
API Documentation
780
536
-----------------
781
537
782
538
To learn more about authenticating your application in {+driver-short+},
783
539
see the following API documentation:
784
540
785
- - `MongoClient <{+api-root+}pymongo/mongo_client.html#pymongo.mongo_client.MongoClient>`__
786
- - `OIDCCallback <{+api-root+}pymongo/auth_oidc.html#pymongo.auth_oidc.OIDCCallback>`__
541
+ - `MongoClient <{+api-root+}pymongo/mongo_client.html#pymongo.mongo_client.MongoClient>`__
0 commit comments