我正在开发一种可以作为 Windows Application(Desktop Client)
或通过 HTML5 (Web Client)
访问的产品 . 我正在努力 integrate Power BI reports
进入我的产品 . 要访问集成Power BI报告所需的Power BI API,我使用https://powerbi.microsoft.com/en-us/documentation/powerbi-developer-register-a-client-app/创建了客户端ID
现在我创建了一个使用客户端ID访问Power BI API的类,并使用以下行生成访问令牌:
token = authContext.AcquireToken(resourceUri, ClientID, new Uri(redirectUri),PromptBehavior.RefreshSession).AccessToken;
哪里
resourceUri = Uri to PowerBI APIs
redirectUri = https://login.microsoftonline.com/common (Multi-Tenant)
在桌面客户端上,AcquireToken()方法运行正常,并为我提供了一个输入AD登录凭据的弹出窗口 . 但是当从HTML5客户端执行并抛出异常时,此方法将失败
An exception of type 'System.InvalidOperationException' occurred in Microsoft.IdentityModel.Clients.ActiveDirectory.dll but was not handled in user code.
Additional information: Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.
我在一些博客中读到,弹出用于Oauth身份验证的登录窗口是基于浏览器的 . 如果是这样,为什么从HTML5客户端调用时无法弹出?
是否有可能获得类似的弹出式 Login window using ADAL & Oauth for HTML5 client
.
在这方面,任何帮助都将受到赞赏 .
1 回答
您在桌面上看到的弹出窗口是一个完整的窗口形式 - 显然无法从服务器端运行的网站的代码隐藏中打开 . 您需要注册两个不同的clientID,一个用于本机客户端(桌面),一个用于机密客户端(网站) . 完成后,您需要在访问令牌获取中驱动OpenId COnenct登录,或者您需要驱动oauth2授权请求 - 所有表单服务器端代码并使用浏览器表面作为与用户交互的机制 . 有关示例,请参阅https://azure.microsoft.com/en-us/documentation/samples/active-directory-dotnet-webapp-webapi-openidconnect/,只需使用Power BI更改自定义API . HTH