Asp.net mvc 获取PowerBI Embedded的Azure PowerBI容量的授权代码

Asp.net mvc 获取PowerBI Embedded的Azure PowerBI容量的授权代码,asp.net-mvc,azure,powerbi,Asp.net Mvc,Azure,Powerbi,我正在为PowerBI Embedded编程启动/停止Azure PowerBI容量 单击按钮,恢复/挂起Azure中的powerbi嵌入服务。我按照下面的链接来做这件事 如何在每次单击按钮时动态获取授权码。您可以使用Power BI获取访问令牌。获取它的最简单方法是安装Microsoft.IdentityModel.Clients.ActiveDirectory NuGet包。然后,要获得访问令牌,需要调用方法。以下是如何做到这一点: private static string re

我正在为PowerBI Embedded编程启动/停止Azure PowerBI容量

单击按钮,恢复/挂起Azure中的powerbi嵌入服务。我按照下面的链接来做这件事


如何在每次单击按钮时动态获取授权码。

您可以使用Power BI获取访问令牌。获取它的最简单方法是安装Microsoft.IdentityModel.Clients.ActiveDirectory NuGet包。然后,要获得访问令牌,需要调用方法。以下是如何做到这一点:

    private static string redirectUri = "https://login.live.com/oauth20_desktop.srf";
    private static string resourceUri = "https://analysis.windows.net/powerbi/api";
    private static string authorityUri = "https://login.windows.net/common/oauth2/authorize";
    // Obtain at https://dev.powerbi.com/apps
    private static string clientId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

    private static AuthenticationContext authContext = new AuthenticationContext(authorityUri, new TokenCache());

    private async void btnAuthenticate_ClickAsync(object sender, EventArgs e)
    {
        var authenticationResult = await authContext.AcquireTokenAsync(resourceUri, clientId, new Uri(redirectUri), new PlatformParameters(PromptBehavior.Auto));
        if (authenticationResult == null)
            MessageBox.Show("Call failed.");
        else
            MessageBox.Show(authenticationResult.AccessToken);
    }
最后一个参数是PromptBehavior.Auto。这意味着您将被提示输入凭据,除非您的身份保存在此计算机上。此外,如果未同意访问此应用程序,也会提示用户。身份验证是以交互方式执行的——它期望有一个人,他将在需要时输入凭据。如果您想以非交互方式获取访问令牌,可以在代码中使用用户名和密码。在这种情况下,获取访问令牌的方法应如下所示:

    private void btnAuthenticate_Click(object sender, EventArgs e)
    {
        AuthenticationResult authenticationResult = null;

        // First check is there token in the cache
        try
        {
            authenticationResult = authContext.AcquireTokenSilentAsync(resourceUri, clientId).Result;
        }
        catch (AggregateException ex)
        {
            AdalException ex2 = ex.InnerException as AdalException;
            if ((ex2 == null) || (ex2 != null && ex2.ErrorCode != "failed_to_acquire_token_silently"))
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }

        if (authenticationResult == null)
        {
            var uc = new UserPasswordCredential("user@example.com", "<EnterStrongPasswordHere>"); // Or parameterless if you want to use Windows integrated auth
            try
            {
                authenticationResult = authContext.AcquireTokenAsync(resourceUri, clientId, uc).Result;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.InnerException == null ? "" : Environment.NewLine + ex.InnerException.Message);
                return;
            }
        }

        if (authenticationResult == null)
            MessageBox.Show("Call failed.");
        else
            MessageBox.Show(authenticationResult.AccessToken);
    }
private void btnAuthenticate\u单击(对象发送方,事件参数e)
{
AuthenticationResult AuthenticationResult=null;
//首先检查缓存中是否有令牌
尝试
{
authenticationResult=authContext.AcquireTokenSilentAsync(resourceUri,clientId).Result;
}
捕获(聚合异常)
{
AdalException ex2=ex.InnerException作为AdalException;
if((ex2==null)| |(ex2!=null&&ex2.ErrorCode!=“无法以静默方式获取令牌”))
{
MessageBox.Show(例如Message);
返回;
}
}
如果(authenticationResult==null)
{
var uc=新用户密码凭据(“user@example.com“,”“);//或无参数,如果要使用Windows集成身份验证
尝试
{
authenticationResult=authContext.AcquireTokenAsync(resourceUri、clientId、uc);
}
捕获(例外情况除外)
{
MessageBox.Show(ex.Message+ex.InnerException==null?“:Environment.NewLine+ex.InnerException.Message);
返回;
}
}
如果(authenticationResult==null)
MessageBox.Show(“调用失败”);
其他的
Show(authenticationResult.AccessToken);
}
请注意,如果您的应用未获得同意,此呼叫可能会失败。要执行此操作,请转到Azure门户->Azure Active Directory->应用程序注册并找到您的应用程序。然后打开应用程序的设置,在所需权限中选择Power BI Service,然后单击授予权限:


此时,您可以使用此访问令牌执行REST API调用或在应用程序中嵌入元素。此令牌允许访问用户可以访问的所有内容,并且在您在门户中注册应用程序时允许访问该令牌。但是,如果您想为一个特定的报告(或互动程序或仪表板)生成令牌,那么您可以调用一些方法,例如(使用ADAL访问令牌在生成嵌入令牌的请求头中对自己进行身份验证)。

按钮位于aad后面的服务/应用程序是否安全?是。。它在AAD之下。在应用程序类型“本机”下