Microsoft 标识平台和 OAuth 2.0 代理流

发布时间 2023-12-08 16:47:47作者: 一个土豆一棵青菜
参考:Microsoft 标识平台和 OAuth 2.0 代理流 https://learn.microsoft.com/ZH-CN/entra/identity-platform/v2-oauth2-on-behalf-of-flow
/// <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; } }