File tree Expand file tree Collapse file tree 3 files changed +30
-12
lines changed Expand file tree Collapse file tree 3 files changed +30
-12
lines changed Original file line number Diff line number Diff line change @@ -588,18 +588,9 @@ def _decorate_scope(
588
588
raise ValueError (
589
589
"API does not accept {} value as user-provided scopes" .format (
590
590
reserved_scope ))
591
- if self .client_id in scope_set :
592
- if len (scope_set ) > 1 :
593
- # We make developers pass their client id, so that they can express
594
- # the intent that they want the token for themselves (their own
595
- # app).
596
- # If we do not restrict them to passing only client id then they
597
- # could write code where they expect an id token but end up getting
598
- # access_token.
599
- raise ValueError ("Client Id can only be provided as a single scope" )
600
- decorated = set (reserved_scope ) # Make a writable copy
601
- else :
602
- decorated = scope_set | reserved_scope
591
+
592
+ # client_id can also be used as a scope in B2C
593
+ decorated = scope_set | reserved_scope
603
594
decorated -= self ._exclude_scopes
604
595
return list (decorated )
605
596
Original file line number Diff line number Diff line change @@ -625,3 +625,18 @@ def test_organizations_authority_should_emit_warnning(self):
625
625
self ._test_certain_authority_should_emit_warnning (
626
626
authority = "https://login.microsoftonline.com/organizations" )
627
627
628
+
629
+ class TestScopeDecoration (unittest .TestCase ):
630
+ def _test_client_id_should_be_a_valid_scope (self , client_id , other_scopes ):
631
+ # B2C needs this https://learn.microsoft.com/en-us/azure/active-directory-b2c/access-tokens#openid-connect-scopes
632
+ reserved_scope = ['openid' , 'profile' , 'offline_access' ]
633
+ scopes_to_use = [client_id ] + other_scopes
634
+ self .assertEqual (
635
+ set (ClientApplication (client_id )._decorate_scope (scopes_to_use )),
636
+ set (scopes_to_use + reserved_scope ),
637
+ "Scope decoration should return input scopes plus reserved scopes" )
638
+
639
+ def test_client_id_should_be_a_valid_scope (self ):
640
+ self ._test_client_id_should_be_a_valid_scope ("client_id" , [])
641
+ self ._test_client_id_should_be_a_valid_scope ("client_id" , ["foo" ])
642
+
Original file line number Diff line number Diff line change @@ -884,6 +884,18 @@ def test_b2c_acquire_token_by_ropc(self):
884
884
scope = config ["scopes" ],
885
885
)
886
886
887
+ def test_b2c_allows_using_client_id_as_scope (self ):
888
+ # See also https://learn.microsoft.com/en-us/azure/active-directory-b2c/access-tokens#openid-connect-scopes
889
+ config = self .get_lab_app_object (azureenvironment = "azureb2ccloud" )
890
+ config ["scopes" ] = [config ["appId" ]]
891
+ self ._test_username_password (
892
+ authority = self ._build_b2c_authority ("B2C_1_ROPC_Auth" ),
893
+ client_id = config ["appId" ],
894
+
895
+ password = self .get_lab_user_secret ("msidlabb2c" ),
896
+ scope = config ["scopes" ],
897
+ )
898
+
887
899
888
900
class WorldWideRegionalEndpointTestCase (LabBasedTestCase ):
889
901
region = "westus"
You can’t perform that action at this time.
0 commit comments