[英]Access token not containing SCP (roles) claims via Microsoft Graph
我正在使用Microsoft Graph SDK為我的應用程序(不是用戶)獲取訪問令牌,以便從共享點進行讀取。 我一直在關注該文檔 ,並發布了此問題 。 鏈接的SO中的代碼是相同的。 我能夠在Azure門戶中添加應用程序權限以及授予它們(通過按按鈕)。 問題是,返回使用的令牌中不包含任何角色/ scp聲明。 因此,當使用令牌時,我收到“令牌中需要包含scp或角色聲明”消息。
可以肯定的是,獲取訪問令牌時傳遞給我的范圍的唯一值是: https://graph.microsoft.com/.default
: https://graph.microsoft.com/.default
。 我沒有傳遞Sites.ReadWrite.All之類的任何東西(如果我仍然添加該作用域,則會出現異常)。 我不確定如何繼續進行故障排除,我們將不勝感激。
編輯:使用如下所示的圖形SDK添加代碼:
var client = new ConfidentialClientApplication(id, uri, cred, null, new SessionTokenCache());
var authResult = await client.AcquireTokenForClientAsync(new[] {"https://graph.microsoft.com/.default"});
var token = authResult.AccessToken;
var graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(async request => {request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token)}));
var drives = await graphServiceClient.Sites[<sharepoint_host>].SiteWithPath(<known_path>).Drives.Request().GetAsync();
問題是,返回使用的令牌中不包含任何角色/ scp聲明。
如果在解碼的訪問令牌中找不到任何角色/ scp聲明。 您需要再次檢查Azure門戶中的權限。
解碼后的訪問令牌應包含您授予的角色。
登錄Azure門戶->單擊“ Azure Active Directory”->單擊“應用程序注冊(預覽)->查找應用程序”。
單擊您的應用程序-> API權限->檢查您是否對應用程序具有管理員權限。 如果不是,請單擊“授予管理員同意”。
獲取訪問令牌的代碼。 您可以在此處找到更多詳細信息。
//authority=https://login.microsoftonline.com/{tenant}/
ClientCredential clientCredentials;
clientCredentials = new ClientCredential("{clientSecret}");
var app = new ConfidentialClientApplication("{clientId}", "{authority}", "{redirecturl}",
clientCredentials, null, new TokenCache());
string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
AuthenticationResult result = null;
result = app.AcquireTokenForClientAsync(scopes).Result;
Console.WriteLine(result.AccessToken);
解決方案似乎以不同的方式進行應用程序初始化:
var app = new ConfidentialClientApplication(ClientId, Authority, RedirectUri, credentials, null, new TokenCache());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.