Microsoft 标识平台和 OAuth 2.0 代理流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
参考:Microsoft 标识平台和 OAuth 2.0 代理流 https://learn.microsoft.com/ZH-CN/entra/identity-platform/v2-oauth2-on-behalf-of-flow<br>  /// <summary>
        /// 获取B数据
        /// </summary>
        /// <returns></returns>
        public async Task<RestResponse> GetEmdData()
        {
 
            var tokenResponse = await GetToEMDToken();
 
            string url = MaintenanceConsts.GETEMDDATAURL;
            string token = tokenResponse.AccessToken;
            var client = new RestClient(_emdBaseUrl);
            var request = new RestRequest(url);
            request.AddHeader("Authorization", "Bearer " + token);
            var response = await client.GetAsync(request);
            return response;
        }
 
        /// <summary>
        /// 获取访问B的token
        /// </summary>
        /// <returns></returns>
        private async Task<TokenResponse> GetToEMDToken()
        {
            try
            {
                var authorization = _httpContextAccessor.HttpContext.Request.Headers["Authorization"];
                var accessToken = authorization.Any() ? authorization.ToString() : "";
                string baseUrl = _instance + _tenantId + "/";
 
 
                string assertion = accessToken?.Replace("Bearer ", "");
 
                var options = new RestClientOptions(baseUrl);
                using var client = new RestClient(options);
                var request = new RestRequest(MaintenanceConsts.GETEMDTOKENURL)
                .AddHeader("Content-Type", MaintenanceConsts.CONTENTTYPE)
                .AddParameter("grant_type", MaintenanceConsts.GRANTTYPE)
                .AddParameter("client_id", _clientId)
                .AddParameter("client_secret", _clientSecret)
                .AddParameter("assertion", assertion)
                .AddParameter("scope", _emdScope)
                .AddParameter("requested_token_use", MaintenanceConsts.REQUESTEDTOKENUSE);
                var response = await client.PostAsync<TokenResponse>(request);
 
                return response;
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                _logger.LogError(ex.ToString());
                throw;
            }
 
 
 
        }

  

posted @   一个土豆一棵青菜  阅读(120)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示