我正在尝试为Azure Active Tenant中的来宾用户获取Azure Active Directory访问令牌。我可以为在Azure AD中创建的普通用户获取访问令牌,但是当我为来宾用户使用userName(电子邮件)和密码时,却出现异常:
Accessing_ws_metadata_exchange_failed: Accessing WS metadata exchange failed
内部异常:
Response status code does not indicate success: 406 (NotAcceptable).
负责获取令牌的代码:
var context = new AuthenticationContext($"{cloud}/{tenant}");
var credentials = new UserPasswordCredential(user, password);
var result = await authenticationContext.AcquireTokenAsync(resource, client, credentials);
链接到MSND:AuhtenticationContext
我想问题可能与代码无关,而与Azure Active Directory配置有关。
我更改了Azure Active Directory>用户>用户设置>外部协作设置>来宾用户权限仅限于NO,但无济于事。
有什么建议吗?
答案 0 :(得分:0)
是的,您使用的登录流程实际上不适用于联合用户(例如这些来宾)。 如果要支持他们, 您将不得不切换到使用其他流程。 您在此处使用的“资源所有者密码凭证”(ROPC)授予流仅是真正的旧版升级路径,并不是真正的现代认证。
顺便说一句,该登录流程也不支持具有多重身份验证或过期密码的用户。
根据您的应用类型,您可以从不同的流程中进行选择:
对于后端Web应用程序, 通过将用户重定向到登录名,授权码流起作用, 找回您用来交换令牌的代码。
在本机应用程序中,可以通过向用户显示登录页面的弹出窗口来使用它。
可以通过Mappings:
DomainResourceMapping:
DUBCrossAccountIAMRole:
beta: "xyz"
prod: "act"
Resources:
LambdaFunction:
Type: AWS::Serverless::Function
Properties:
Handler: '...t'
Runtime: java8
CodeUri:
Bucket: ...
Key: ...
Description: nn
Timeout: 20
MemorySize: 512
Environment:
Variables:
DUB_CROSS_ACCOUNT_IAM_ROLE:
- Fn::FindInMap:
- DomainResourceMapping
- DUBCrossAccountIAMRole
- {Ref: Stage}
的不同重载来使用它。
请勿使用接受AcquireTokenAsync()
的人。
设备代码要求您在ADAL上使用两个功能:UserPasswordCredential
和AcquireDeviceCodeAsync
。
您调用第一个,向用户显示返回的消息,
然后等待第二个。
要求用户打开浏览器,
并在其中输入消息中显示的代码。
有关此流程的更多信息:https://joonasw.net/view/device-code-flow