我正在尝试使用以下代码为用户生成令牌。
string apiResourceId = "11224320-66b9-4132-8953-9aa485f07004";
string clientId = "bc9869a0-2393-4e42-8c52-845071640ea8";
Uri redirectUri = new Uri("https://localhost:44335/");
string authority = string.Format("https://login.windows.net/{0}",
"rudderless.onmicrosoft.com");
var authContext = new AuthenticationContext(authority);
AuthenticationResult authenticationResult;
authenticationResult = await authContext.AcquireTokenAsync(apiResourceId, clientId,
redirectUri, new PlatformParameters(PromptBehavior.Auto, null));
我在AcquireTokenAsync调用中遇到错误 -
AADSTS70002:请求正文必须包含以下参数: 'client_secret或client_assertion'。跟踪ID: a198696d-8377-40eb-8351-527a25183500相关ID: 24d4b47d-67bf-46c0-a6b7-a248c434512e时间戳:2017-09-20 23:09:38Z
如果我想在用户针对AAD进行身份验证时生成令牌,为什么还需要client_secret或client_assertion?我使用的客户端类型是“Web app / API”。但是,当我尝试使用Native客户端时,我获得了生成的令牌,但是对apResourceID的API调用却产生了未经授权的错误。
我正在寻求与scinario相关的帮助 -
答案 0 :(得分:1)
- 为什么我在使用用户身份验证流程时需要提供client_secret?
醇>
Web应用和API被视为机密客户端。有关OAuth 2规范中不同客户端类型的定义,请参阅here。这些类型的客户端总是需要使用他们的客户端密钥进行身份验证,无论他们遵循什么流程。
Confidential clients are typically issued (or establish) a set of
client credentials used for authenticating with the authorization
server (e.g., password, public/private key pair).
- 当我将客户端类型更改为Native时,为什么AcquireToken成功?
醇>
Native Client应用程序是公共客户端的子集。这些在规范中定义为:
Clients incapable of maintaining the confidentiality of their
credentials (e.g., clients executing on the device used by the
resource owner, such as an installed native application or a web
browser-based application), and incapable of secure client
authentication via any other means.
因此,他们没有或需要client_secret
进行身份验证...但这也意味着他们只能通过用户上下文进行身份验证,而机密客户端可以在没有用户在场的情况下进行身份验证(Client Credential Flow )。
- 为什么通过本机客户端生成的令牌会授予Unauthorize 错误?
醇>
如果不了解更多有关错误的错误以及您正在进行的调用会导致此错误,则很难回答。您应该提供有关此方案的更多信息。
- 管理员是否有办法代表每个用户同意 在AAD?
醇>
是。在新的Azure Active Directory V2端点中,我们有一个" Admin Consent Endpoint"。
使用较旧的V1端点,我们有一个&prompt=admin_consent
查询字符串,您可以阅读here。