gpt4 book ai didi

asp.net-mvc - 如何在不使用对话框的情况下在 Azure Active Directory 中授权?

转载 作者:行者123 更新时间:2023-12-02 00:49:44 25 4
gpt4 key购买 nike

我的应用程序向所有用户显示我的 power bi 帐户的仪表板,我通过对话框授权 Azure Active Directory 以获取访问 token 。我可以在不使用授权对话框的情况下对我的凭据进行硬编码并获取访问 token 吗?代码。它可以工作,但它正在使用授权对话框。

           var @params = new NameValueCollection
{
{"response_type", "code"},
{"client_id", Properties.Settings.Default.ClientID},
{"resource", "https://analysis.windows.net/powerbi/api"},
{"redirect_uri", "http://localhost:13526/Redirect"}
};


var queryString = HttpUtility.ParseQueryString(string.Empty);
queryString.Add(@params);

string authorityUri = "https://login.windows.net/common/oauth2/authorize/";
var authUri = String.Format("{0}?{1}", authorityUri, queryString);
Response.Redirect(authUri);


Redirect.aspx
string redirectUri = "http://localhost:13526/Redirect";
string authorityUri = "https://login.windows.net/common/oauth2/authorize/";

string code = Request.Params.GetValues(0)[0];

TokenCache TC = new TokenCache();

AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
ClientCredential cc = new ClientCredential
(Properties.Settings.Default.ClientID,
Properties.Settings.Default.ClientSecret);

AuthenticationResult AR = AC.AcquireTokenByAuthorizationCode(code, new Uri(redirectUri), cc);

Session[_Default.authResultString] = AR;

Response.Redirect("/Default.aspx");
Default.aspx
string responseContent = string.Empty;

System.Net.WebRequest request = System.Net.WebRequest.Create(String.Format("{0}dashboards", baseUri)) as System.Net.HttpWebRequest;
request.Method = "GET";
request.ContentLength = 0;
request.Headers.Add("Authorization", String.Format("Bearer {0}", authResult.AccessToken));

using (var response = request.GetResponse() as System.Net.HttpWebResponse)
{
using (var reader = new System.IO.StreamReader(response.GetResponseStream()))
{
responseContent = reader.ReadToEnd();
PBIDashboards PBIDashboards = JsonConvert.DeserializeObject<PBIDashboards>(responseContent);
}
}

最佳答案

我在没有使用 ADAL 的情况下做过一次。对于 Power BI 也是如此,因为它们不提供应用程序权限,仅提供委托(delegate)。

注意:如果用户启用了 MFA、密码已过期等,此方法将不起作用。一般来说,您会想要使用交互式流程。您甚至可以有一个引导过程,用户以交互方式登录并存储收到的刷新 token 。只要刷新 token 有效,就可以在后台使用该刷新 token 。

您需要使用 grant_type=password 调用 AAD token 端点。您将在表单参数中指定用户名和密码,以及客户端 ID、客户端 key 和资源 URI。

这是我编写的函数:

private async Task<string> GetAccessToken()
{
string tokenEndpointUri = Authority + "oauth2/token";

var content = new FormUrlEncodedContent(new []
{
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("username", Username),
new KeyValuePair<string, string>("password", Password),
new KeyValuePair<string, string>("client_id", ClientId),
new KeyValuePair<string, string>("client_secret", ClientSecret),
new KeyValuePair<string, string>("resource", PowerBiResourceUri)
}
);

using (var client = new HttpClient())
{
HttpResponseMessage res = await client.PostAsync(tokenEndpointUri, content);

string json = await res.Content.ReadAsStringAsync();

AzureAdTokenResponse tokenRes = JsonConvert.DeserializeObject<AzureAdTokenResponse>(json);

return tokenRes.AccessToken;
}
}

这里的权限是https://login.microsoftonline.com/tenant-id/。这是我正在使用的响应类:

class AzureAdTokenResponse
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
}

关于asp.net-mvc - 如何在不使用对话框的情况下在 Azure Active Directory 中授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com