来自azure活动目录的C#CSOM Sharepoint Bearer请求

时间:2017-07-26 15:19:44

标签: sharepoint azure-active-directory csom

我使用以下方法作为此基础(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)权限并设置以下内容

Required Permissions

我也为应用注册做了同样的事情,我们并没有真正使用它!还不确定应用注册是如何进入的......)

1 个答案:

答案 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'