我正在尝试调整此处显示的 WebAPI 示例,以在 MVC5 中使用:
https://msdn.microsoft.com/en-US/library/dn931282.aspx#Configure
我有一个基于常规AccountController
的登录系统,但我还需要用户通过 OAuth 登录到 PowerBI,因此我可以通过 PowerBI REST API 提取数据集。但是,我ClaimsPrincipal.Current.FindFirst(..)
得到了null
。
private static async Task<string> getAccessToken()
{
// Create auth context (note: token is not cached)
AuthenticationContext authContext = new AuthenticationContext(Settings.AzureADAuthority);
// Create client credential
var clientCredential = new ClientCredential(Settings.ClientId, Settings.Key);
// Get user object id
var userObjectId = ClaimsPrincipal.Current.FindFirst(Settings.ClaimTypeObjectIdentifier).Value;
// Get access token for Power BI
// Call Power BI APIs from Web API on behalf of a user
return authContext.AcquireToken(Settings.PowerBIResourceId, clientCredential, new UserAssertion(userObjectId, UserIdentifierType.UniqueId.ToString())).AccessToken;
}
在示例应用程序(WebAPI 项目)中一切正常。我app.UseOpenIdConnectAuthentication
还在Startup.Auth.cs
.
看来问题是我在“ClaimsPrincipal.Current”中拥有的唯一声明类型是“CookieAuthentication” - 它缺少http://schemas.microsoft.com/identity/claims/objectidentifier声明。
另外...Microsoft OAuth 窗口永远不会在浏览器中打开...但是,错误出现在 ActiveDirectory 相关代码中...该代码首先不需要 OAuth 令牌,对吗?