我使用以下方法作为此基础(https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-webapi-dotnet)。
设置azure后,我得到了所有这个例子。但现在我们需要将其移植到实际的现有移动应用程序和web api应用程序。移动应用可以获得承载令牌,但是当我们将其传递给网络API时,我们会在 CSOM 请求中传递此内容,如下所示,但我们仍然会获得 401 Unauthroised 响应。
public static ClientContext GetSharepointBearerClientContext(this JwtTokenDetails tokenDetails)
{
var context = new ClientContext(tokenDetails.SiteUrl);
//context.AuthenticationMode = ClientAuthenticationMode.Anonymous;
context.ExecutingWebRequest += new EventHandler<WebRequestEventArgs>((s, e) =>
{
e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer " + tokenDetails.BearerToken;
});
return context;
}
我们的web api没有使用上面示例中的任何技术,因为我认为我们应该能够通过标头中的CSOM请求传递令牌,但这不起作用,我还能看看吗?
我已分配 Office 365 Sharepoint Online(Microsoft.Sharepoint)权限并设置以下内容
我也为应用注册做了同样的事情,我们并没有真正使用它!还不确定应用注册是如何进入的......)
答案 0 :(得分:1)
所以这是可能的,只是微软告诉我们输入一个不正确的值。所有文档都说 APP ID URI 在资源中。但在我们的案例中,它需要是sharepoint url。
所以我们有一个租户名称,在azure id上是域名,例如srmukdev.onmicrosoft.com
租户:srmukdev.onmicrosoft.com
应用程序ID :这是在azure活动目录中注册的应用程序的guid。
RedirectUri :这可以是任何网址(URI),据我所知,它实际上并未用作移动应用的网址。
ResourceUrl :srmukdev.sharepoint.com
我用来获取令牌的代码如下所示,用于WPF示例。 aadInstance是https://login.microsoftonline.com/ {0}
select recipes.id, recipes.name from recipes inner join ingredients on recipes.id = ingredients.recipeID inner join baseingredient on ingredients.baseID = baseingredient.id where baseingredient.name = 'Eggs'