使用时我尝试访问Graph Service Client时收到错误:
代码:Authorization_RequestDenied
消息:没有足够的权限来完成操作.
在研究此错误后,最常见的解决方案是设置API的权限.这已经完成,并具有读取基本/完整配置文件的权限.
我删除并重新添加了API.
下面是我的AzureAuthenticationProvider类中的代码,它继承自IAuthenticationProvider:
public class AzureAuthenticationProvider : IAuthenticationProvider
{
private string _azureDomain = "myDevDom.onmicrosoft.com";
public async Task AuthenticateRequestAsync(HttpRequestMessage request)
{
try
{
string clientId = "2b823c67-1b0d-4a10-a9e1-737142516f5q";
string clientSecret = "xxxxxx";
AuthenticationContext authContext = new AuthenticationContext("https://login.windows.net/" + _azureDomain + "/oauth2/token");
ClientCredential credentials = new ClientCredential(clientId, clientSecret);
AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", credentials);
request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken);
}
catch (Exception ex)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试将客户端密钥更改为无效的ID并且它引发了错误,因此客户端密钥是正确的.我还尝试通过更改访问令牌来验证访问令牌是否有效,这也会返回错误.
上面的代码似乎工作正常.
以下是我尝试访问Azure AD的代码:
public async Task<IGraphServiceUsersCollectionPage> …Run Code Online (Sandbox Code Playgroud) c# permissions azure azure-active-directory azure-ad-graph-api
我正在尝试通过图形API访问Active Directory数据.我在运行应用程序时收到以下错误.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息: "System.TypeLoadException:类型违反的继承安全规则:'System.Net.Http.WebRequestHandler'.派生类型必须与基类型的安全可访问性匹配,或者不太容易访问."
来源错误:
在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.
堆栈跟踪:
[TypeLoadException: Inheritance security rules violated by type: 'System.Net.Http.WebRequestHandler'. Derived types must either match the security accessibility of the base type or be less accessible.]
Microsoft.Owin.Security.OpenIdConnect.OpenIdConnectAuthenticationMiddleware.ResolveHttpMessageHandler(OpenIdConnectAuthenticationOptions options) +0
Microsoft.Owin.Security.OpenIdConnect.OpenIdConnectAuthenticationMiddleware..ctor(OwinMiddleware next, IAppBuilder app, OpenIdConnectAuthenticationOptions options) +996
lambda_method(Closure , OwinMiddleware , IAppBuilder , OpenIdConnectAuthenticationOptions ) +54
[TargetInvocationException: Exception has been thrown by the target of an invocation.]
System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) +0
System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) …Run Code Online (Sandbox Code Playgroud) 我被告知在这里提出一个关于Azure AD Graph Api的问题,而不是将其作为相应GitHub示例存储库的问题提出,我希望Azure Graph API团队监控SO并可以帮助我们解决这个github示例问题
该问题的一些额外背景:
我们正在使用Microsoft.Azure.ActiveDirectory.GraphClient nuget在Azure AD测试租户中创建和管理用户.在此示例应用程序之后, 我们可以通过Graph API在Azure AD中创建和更新用户.这很好,直到大约2-3天前发生的某个时刻(不确定确切的时刻,我们在周二早上的AU时间发现问题.上周成功运行是在上周五).它是100%正常工作的代码,并确认它不是我们的代码 - 我再次浏览了示例应用程序 - 它现在也已经破坏了.我已经使用最新的GraphClient v2.1.0和来自示例应用程序的原始版本-v2.0.6对其进行了测试
为了简化问题的测试,我已经制作了一个基于LINQ的示例并修改了一些秘密(如果你想运行它,你需要按照控制台应用程序示例指南输入你的值,而不是原始的示例应用程序)这里也是小提琴捕获(编辑)
fiddler捕获中很少有注意事项 - Azure AD Graph API不会返回刷新令牌以及访问令牌:
{"expires_in":"3599","token_type":"Bearer","scope":"UserProfile.Read",
"expires_on":"1441183928","not_before":"1441180028","resource":"https://graph.windows.net",
"access_token":"TOKEN WAS HERE"}
Run Code Online (Sandbox Code Playgroud)
我可以在这里看到范围字符串的问题,但是当我按照Sample app调用令牌时,我们没有在GraphClient中设置任何explict范围(这个代码之前很好,正如我之前提到的那样)
用户创建响应在发生的事情及其发生的原因方面很清楚
{"odata.error":
{"code":"Authorization_RequestDenied","message":
{"lang":"en","value":"Insufficient privileges to complete the operation."}
}
}
Run Code Online (Sandbox Code Playgroud)
但是目前尚不清楚如何通过任何这些AuthenticationContext.AcquireToken方法重载来请求额外的权限范围. 同样奇怪的是,相同的代码之前完全正常运行并且在经过一些神秘的变化后现在被破坏了吗?
所以我几乎没有问题:
如何在GraphClient库中添加额外的范围权限以获取启用了用户修改的Graph API令牌.这可能是问题的乐队援助解决方案.
看起来Azure AD尝试管理门户中客户端应用程序的权限.但是,Native Client类型的应用程序没有额外的权限.如何显式更新应用程序权限,以便现有代码可以再次运行.有可能吗?
任何人都可以推荐其他库与GraphAPI进行交互,这允许消费者明确指定所请求令牌的范围吗?
================更新================
是的,我看到了同意流程文档.追逐这个问题我创建了新的Azure AD租户,添加了全新的应用程序并添加了所有可能的权限,包括所有可用的应用程序和委托权限: 现在看起来像这样.我也
我可以获得一个带有长列表范围的令牌,例如
Directory.AccessAsUser.All Directory.Read Directory.Write User.Read User.ReadWrite User.Read.All User.ReadBasic.All User.ReadWrite.All user_impersonation UserProfile.Read …
c# azure oauth-2.0 azure-active-directory azure-ad-graph-api
我正在寻找一种通过用户名/密码以无头方式为Azure AD b2c验证用户的方法.Azure AD b2c很棒,但我们认为登录的重定向可能导致客户之间的混淆(有时甚至被某些浏览器阻止).此外,我们希望完全控制客户的UX体验.
我研究了ADAL和Graph API,但还没有找到任何东西.
吉娜
我有一个多租户ASP.NET应用程序使用OpenIdConnect和Azure AD作为Office 365的身份提供程序.当用户通过身份验证后,我收到了我的声明ClaimsPrincipal.Current.
我想识别用户并将此id引用存储在我的数据库中.我问了这个问题.有人回答说
当尝试唯一地识别用户时[NameIdentifier]应该是您的首选.
但似乎NameIdentifier声称,http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
取决于应用程序.确切地说,如果我在Azure AD中创建另一个应用程序,那么NameIdentifier对于同一个真正的 Office365用户来说,它们将是不一样的.请记住,我们可能必须创建另一个Azure AD清单(因为我们可能需要其他范围),我们应该能够找回相同的最终用户.
与此同时,我评论了另一个主张: ObjectIdentifier http://schemas.microsoft.com/identity/claims/objectidentifier
ObjectIdentifier对于给定的Office 365用户,所有Azure AD保护的应用程序似乎都是相同的.
你能准确解释这两种说法之间的区别吗?更重要的是,您是否可以确认ObjectIdentifier可以在任何Office 365订阅中将其用作用户的"通用"标识符.
claims-based-identity azure-active-directory office365api azure-ad-graph-api
我正在使用https://login.microsoftonline.com/.../oauth2/v2.0/token使用以下范围对 azure 广告进行身份验证(授权代码授予):offline_access、openid、profile、User.Read
根据文档,我收到的访问令牌应包含用户的角色: https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens
但是,只有身份令牌返回角色:
--Access Token
{
"typ": "JWT",
"nonce": "IWTwK2P0vzHoNnv1vvvSsjZSbAYPpSIk8MozY0A4WR0",
"alg": "RS256",
"x5t": "nOo3ZDrODXEK1jKWhXslHR_KXEg",
"kid": "nOo3ZDrODXEK1jKWhXslHR_KXEg"
}.{
...
"rh": "0.ASgASPp-HouAsUyXCdG05vvfeHAoPPG46TFOoWYsil-LDcsoADw.",
"scp": "User.Read profile openid email",
...
}.[Signature]
Run Code Online (Sandbox Code Playgroud)
--Identity Token
{
"typ": "JWT",
"alg": "RS256",
"kid": "nOo3ZDrODXEK1jKWhXslHR_KXEg"
}.{
...
"rh": "0.ASgASPp-HouAsUyXCdG05vvfeHAoPPG46TFOoWYsil-LDcsoADw.",
"roles": [
"MyApp.Read",
"MyApp.Admin",
"MyApp.Write",
],
...
}.[Signature]
Run Code Online (Sandbox Code Playgroud)
有没有办法让访问令牌也包含角色?
c# active-directory azure-active-directory azure-ad-graph-api asp.net-core
我有一个独立的Web应用程序(不是加载项),我想从这个Web应用程序访问Project Server PWA oData,而不使用PWA用户名/密码组合.
我可以通过在Azure AD中注册我的Web应用程序并将应用程序配置为需要"Office 365 SharePoint Online"的"读取"权限来为SharePoint oData执行此操作
如果您对SharePoint数据有兴趣,请参阅此文章了解详细信息:https://www.itunity.com/article/integrating-angularjs-aad-office-365sharepoint-part-1-622
我的问题是我想对Project Server执行相同操作,但在Azure AD中看不到任何相关的Project Online权限.
有没有人使用Azure AD令牌访问过Project Online?
我在Azure门户下注册了两个应用程序:测试版和生产版.我的测试应用程序可以正常使用我从Azure门户的测试应用程序详细信息中获得的客户端ID和ClientSecret/AppKey.然而,当我移动到生产一个,因为我用我注册的生产应用程序指定的那个替换ClientId和Secret值,我突然得到一个错误:
AdalServiceException:AADSTS70002:验证凭据时出错.AADSTS50012:提供了无效的客户端密钥
但我很确定我的客户端密码是正确的,因为我刚刚从Portal复制并粘贴.这有什么解决方案吗?
web-applications azure azure-web-sites asp.net-mvc-5 azure-ad-graph-api
我有一个与WebAPI对话的Angular应用程序,用户通过Azure Active Directory进行身份验证
我按照这里的示例https://github.com/Azure-Samples/active-directory-angularjs-singlepageapp-dotnet-webapi,并能够针对AD验证用户身份并将其传递给Web API.
但是,我想访问Web API中的Graph API并获取当前用户配置文件信息.我该如何设置?
更新以提供有关设置的更多上下文:
我有一个网站(site.domain1.com),它承载制作SPA应用程序的html和javascript文件.我在api.domain2.com上托管了Web API.使用OAAL隐式流与ADAL.js和angular-adal对Azure AD进行身份验证.我想在SPA中进行身份验证以获取API的accessToken.我希望在API中作为查询Graph API的请求的一部分,以获取有关当前用户登录的更多信息.
我能够获得API的accessToken,并且它当前生成了Claim Principal.问题是使用Web API中的当前标识查询Graph API.
更新:
我不想将管理员权限授予Web API,但我更愿意将用户同意仅从浏览器转发到网站和Web api的"读取用户配置文件".
我使用类似的方法来代表这里的样本https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof
它适用于我的测试AD并且不适用于生产AD的问题.说用户需要在使用Graph Api之前集中应用程序.(对于生产AD我只有用户可以添加用户权限但不能添加应用程序权限.我的猜测是该方案工作我需要AD的全局管理员首先集中).最终,我最终将Web站点和Web API的Azure AD应用程序合并在一起,并使用与Bootstrap Tokens相同的On Behalf Of方法.但我想知道如何使它与2个应用程序正常工作.
我正在尝试使用 MS Graph API 从 OneDrive for Business 获取文件/文件夹列表。我已经在 Graph Explorer 中成功执行了我需要的查询,现在正在我的项目中实施。
我的应用程序是 Windows 服务,因此我使用此方法获取令牌
我已成功检索到令牌,但是当我“获取”此 URL 时...
//graph.microsoft.com/v1.0/users('someuseraccount')/drive/items/somedriveitem/microsoft.graph.createLink
...我收到错误回复:
令牌中需要存在 scp 或角色声明。
我来自服务器的令牌响应如下:
{
"token_type": "Bearer",
"expires_in": "3600",
"scope": "Directory.AccessAsUser.All Files.Read Files.Read.Selected Files.ReadWrite Files.ReadWrite.AppFolder Files.ReadWrite.Selected profile Sites.Read.All User.Read",
"expires_on": "1457343736",
"not_before": "1457339836",
"resource": "https://graph.microsoft.com",
"access_token": "-the token-"
}
Run Code Online (Sandbox Code Playgroud) azure ×5
c# ×3
adal ×1
asp.net-core ×1
azure-ad-b2c ×1
oauth-2.0 ×1
office365api ×1
onedrive ×1
permissions ×1