在Azure OAuth2令牌请求中被两个错误卡住



我正在为OWIN和Azure Active Director实现一个OAuth2提供商。顺便说一句,目前OpenId Connect选项不适合这项工作的要求。

我得到一个验证码,并返回到我的回复url与auth_code,状态,并发出令牌请求"方案://login.windows.net/{myguid}/oauth2/token。

 // Build up the body for the token request
 var body = new List<KeyValuePair<string, string>>();
 body.Add(new KeyValuePair<string, string>("grant_type", "authorization_code"));
 body.Add(new KeyValuePair<string, string>("code", code));
 body.Add(new KeyValuePair<string, string>("redirect_uri", redirectUri));
 body.Add(new KeyValuePair<string, string>("client_id", Options.ClientId));
 body.Add(new KeyValuePair<string, string>("client_secret", Options.ClientSecret));
 // Request the token
 HttpResponseMessage tokenResponse =
     await httpClient.PostAsync(TokenEndpoint, new FormUrlEncodedContent(body));
 string text = await tokenResponse.Content.ReadAsStringAsync();
 tokenResponse.EnsureSuccessStatusCode();

我得到这个错误:

{"error":"invalid_resource","error_description":"AADSTS50001: Resource identifier is not provided.
Trace ID: 227f2af8-0837-4f22-ac0f-a09b3f9a6d50
Correlation ID: 3d783f11-44d0-4efa-8831-3dd581d653ed
Timestamp: 2014-08-08 21:59:49Z","error_codes":[50001],"timestamp":"2014-08-08 21:59:49Z","trace_id":"227f2af8-0837-4f22-ac0f-a09b3f9a6d50","correlation_id":"3d783f11-44d0-4efa-8831-3dd581d653ed"}

好的,我添加了资源选项:

 // Build up the body for the token request
 var body = new List<KeyValuePair<string, string>>();
 body.Add(new KeyValuePair<string, string>("grant_type", "authorization_code"));
 body.Add(new KeyValuePair<string, string>("code", code));
 body.Add(new KeyValuePair<string, string>("redirect_uri", redirectUri));
 body.Add(new KeyValuePair<string, string>("client_id", Options.ClientId));
 body.Add(new KeyValuePair<string, string>("client_secret", Options.ClientSecret));
 body.Add(new KeyValuePair<string, string>("resource", "https://myappid"));
{"error":"invalid_request","error_description":"AADSTS90027: The client 'xxxxx' and resource 'https://myappid' identify the same application.
Trace ID: 6c77f123-d75f-43a9-8117-b3f372891ee4
Correlation ID: d9081f8b-b690-4478-bf15-55325a9736ec
Timestamp: 2014-08-08 21:48:34Z","error_codes":[90027],"timestamp":"2014-08-08 21:48:34Z","trace_id":"6c77f123-d75f-43a9-8117-b3f372891ee4","correlation_id":"d9081f8b-b690-4478-bf15-55325a9736ec"}

所以我必须有正确的应用程序id与我的客户端id相关联。hrrmph !我显然是做错了什么事,只是好像看不出来。有什么建议吗?

我有同样的问题,我只是想实现一个用户登录。

在尝试了1000件事情(包括这篇文章)之后,我发现我可以使用Microsoft.Azure。ActiveDirectory-id作为资源参数。这样我就不需要再创建一个应用了。

http://blogs.msdn.com/b/besidethepoint/archive/2012/10/23/getting-started-with-azure-active-directory.aspx

nameValuePairs.add(new BasicNameValuePair("resource", "00000002-0000-0000-c000-000000000000"));

并得到token

更新:

azure支持建议我使用https://graph.windows.net/:

nameValuePairs.add(new BasicNameValuePair("resource", "https://graph.windows.net/"));

在授权请求中使用"openid"作用域应该触发一个openid连接流,该流将返回一个id_token,而不需要资源。

OAuth处理4方:1)资源所有者,即用户2)资源应用程序:通常是保护用户访问资源所有者的Web API 3)客户端应用程序:代表用户访问资源的Web应用程序或移动应用程序甚至另一个Web API 4)授权:安全令牌服务,对用户和/或客户端应用程序进行身份验证,并向客户端发出委托访问令牌以访问资源。

你的代码对客户端应用程序和资源使用相同的标识符-本质上它试图请求访问令牌来访问自己。可以认为这种情况应该被允许-但今天Azure AD不允许。

请执行以下操作:在Azure AD中注册资源应用程序。在它的清单中添加一个新的appPermission(关注这篇文章)。然后,转到客户端应用程序配置页面,滚动到底部的"其他应用程序的权限"部分,将资源权限添加到"委托权限"的客户端应用程序列表中。

现在,在您的OAuth请求中使用资源应用程序的AppIDURI或ClientID,这样就可以工作了。

相关内容

  • 没有找到相关文章

最新更新