这篇文章主要围绕使用Python/身份验证连接到SharePoint和python身份验证程序展开,旨在为您提供一份详细的参考资料。我们将全面介绍使用Python/身份验证连接到SharePoint的
这篇文章主要围绕使用 Python/身份验证连接到 SharePoint和python身份验证程序展开,旨在为您提供一份详细的参考资料。我们将全面介绍使用 Python/身份验证连接到 SharePoint的优缺点,解答python身份验证程序的相关问题,同时也会为您带来.NET Core:使用 SharePoint API 将文件添加到 SharePoint、EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法、Office365-REST-Python-Client 似乎无法更新 Sharepoint 中的查找列、Python Sharepoint库Office365-REST-Python-Client错误:401:未经授权的网址:https://mydomain.sharepoint.com/sites/sample/_api/Web的实用方法。
本文目录一览:- 使用 Python/身份验证连接到 SharePoint(python身份验证程序)
- .NET Core:使用 SharePoint API 将文件添加到 SharePoint
- EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法
- Office365-REST-Python-Client 似乎无法更新 Sharepoint 中的查找列
- Python Sharepoint库Office365-REST-Python-Client错误:401:未经授权的网址:https://mydomain.sharepoint.com/sites/sample/_api/Web
使用 Python/身份验证连接到 SharePoint(python身份验证程序)
如何解决使用 Python/身份验证连接到 SharePoint
我使用以下代码尝试连接到我公司的 Sharepoint 站点。它提示我输入用户名和密码
import sharepy
from sharepy import connect
from sharepy import SharePointSession
s = sharepy.connect("https://company.sharepoint.com")
我在输入凭据时收到以下错误。当然,我使用这些凭据登录到 sharepoint 站点和 Outlook,因此我知道它存在。如何“将此帐户添加到目录”?或者我可以通过其他任何方式进行连接,也许是通过某种身份验证?我尝试了其他方法,例如导入 office365 库,我总是从中得到:ModuleNotFoundError: No module named ''office365''。任何建议都会很棒。感谢您的帮助!
Requesting security token...
Authentication Failure: AADSTS50034: The user account {EmailHidden} does not exist in the
company.com directory. To sign into this application,the account must be added to the
directory
.NET Core:使用 SharePoint API 将文件添加到 SharePoint
如何解决.NET Core:使用 SharePoint API 将文件添加到 SharePoint
请注意这是 .NET Core。我们已经设置了 Azure AD,我们能够生成访问令牌。问题是当我们尝试将文件发送到 SharePoint 时,我们不断收到 (401) 未经授权的错误。有限的代码示例似乎存在,但从我所见,您应该能够将令牌放入标头并调用 API。正在生成令牌。它就在那里。
CSOM 已添加到解决方案中,但使用“SharePointOnlineCredentials”登录的简单方法在 .NET 核心中不起作用。它需要 oAuth 令牌。
SharePoint 的 Azure API 权限为“AllSites.Manage、AllSites.Read、AllSites.Write、MyFiles.Read、MyFiles.Write、Sites.SearchAll”
知道我在这里做错了什么吗?这些网址在浏览器中有效。
public static void SaveFile()
{
//This sets the token and the token is there
string getToken = SharePointSetToken.SetToken();
if (!String.IsNullOrEmpty(getToken))
{
//The site URL
string siteUrl = "https://MySite.sharepoint.com";
//The folder in the site to add the file too
string folderUrl = "/sites/MyDocuments/";
//The file
string p = @"C:\\MyFolder\\MyFile.pdf";
//The API call
string spUrl = siteUrl + "/_api/web/getfolderbyserverrelativeurl(''" + folderUrl + "'')/Files/add(url=''" + System.IO.Path.GetFileName(p) + "'',overwrite=true)";
//The request parameters
HttpWebRequest webRequest;
webRequest = (HttpWebRequest)HttpWebRequest.Create(spUrl);
webRequest.Method = "POST";
webRequest.Headers.Add("binaryStringRequestBody","true");
webRequest.Headers.Add("Authorization","Bearer " + getToken);
//File as byte[]
byte[] bytefile = System.IO.File.ReadAllBytes(p);
//Save it to SP
webRequest.GetRequestStream().Write(bytefile,bytefile.Length);
//Error Here: 401 The Remote Server returned an error: (401) Unauthorized.
HttpWebResponse endpointresponse = (HttpWebResponse)webRequest.GetResponse();
}
}
EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法
如何解决EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法?
使用 EF Core 和 Azure AD 集成身份验证连接到数据库的主要方式似乎有三种。
方法一:经典方法
在 DbContext 中,输入:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var conn = new sqlConnection(ConnString);
conn.Accesstoken = new AzureServicetokenProvider().GetAccesstokenAsync("https://database.windows.net/").Result;
optionsBuilder.UsesqlServer(conn);
}
这在本地开发人员的机器上和 Azure 中都有效,但是由于没有 OnConfiguring 的异步版本,所以使用 .Result
的这种狡猾的 async-over-sync 用法。不建议使用 .Result
调用 async-over-sync。
方法二:使用连接拦截器
public class AadAuthenticationDbConnectionInterceptor : DbConnectionInterceptor
{
public override async Task<InterceptionResult> ConnectionopeningAsync(DbConnection connection,ConnectionEventData eventData,InterceptionResult result,CancellationToken cancellationToken)
{
var sqlConnection = (sqlConnection)connection;
sqlConnection.Accesstoken = await new AzureServicetokenProvider().GetAccesstokenAsync("https://database.windows.net/");
return await base.ConnectionopeningAsync(connection,eventData,result,cancellationToken);
}
public override InterceptionResult Connectionopening(DbConnection connection,InterceptionResult result)
{
var sqlConnection = (sqlConnection)connection;
sqlConnection.Accesstoken = new AzureServicetokenProvider().GetAccesstokenAsync("https://database.windows.net/").GetAwaiter().GetResult();
return base.Connectionopening(connection,result);
}
}
这也适用于本地和 Azure,但如果您执行任何非异步 EF 操作,仍然存在 .Result
的狡猾异步同步使用,因为 EF 调用非异步 Connectionopening 方法。
方法 3:在连接字符串中指定身份验证类型
如果您使用的是 Microsoft.Data.sqlClient v2.1.0 或更高版本,则可以使用两种新的身份验证类型:Active Directory Managed Identity
和 Active Directory Interactive
。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connString = "Server=tcp:xxxxxx.database.windows.net,1433;Database=yyyyy;Authentication=Active Directory Managed Identity";
optionsBuilder.UsesqlServer(conn);
}
这会为您处理所有事情,并且没有异步同步问题。但是,需要知道代码是否在Azure中运行才能选择身份验证类型;对于本地开发,Active Directory Interactive
模式非常烦人,因为每次启动应用程序时它都会弹出登录提示。
问题是...
有没有办法让这个工作既不存在同步异步问题,也不会有每次运行应用程序时出现登录弹出窗口的问题?
解决方法
@ErikEJ 在评论中回答了这个问题。
解决方案是等待引入 Active Directory Default
身份验证类型的 Microsoft.Data.SqlClient 的 v3.0。有了这个,我们将能够做到:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connString = "Server=tcp:xxxxxx.database.windows.net,1433;Database=yyyyy;Authentication=Active Directory Default";
optionsBuilder.UseSqlServer(conn);
}
听起来这将提供一个巧妙的解决方案。
Office365-REST-Python-Client 似乎无法更新 Sharepoint 中的查找列
如何解决Office365-REST-Python-Client 似乎无法更新 Sharepoint 中的查找列
我设法关注了另一个用户关于上传文件和设置元数据的问题:- Office365-REST-Python-Client 401 on File Update
而且我现在可以按照它在罐头上所说的去做,上传文件并设置元数据。但是,我在使用以下代码时遇到了困难,这是我上面链接到的问题的一位贡献者提供的。 (我认为是瓦迪姆)。
list_item = target_file.listitem_allfields # get associated list item
list_item.set_property("Title","New title")
list_item.update()
ctx.execute_query()
这适用于普通元数据,但我有一列是查找列,我想更新该列。
如果我使用 Shareplum 库,我可以通过将列设置为查找列指向的列表项的 ID 来实现这一点,并且工作正常。
所以我尝试使用 :-
list_item.set_property("Title",1)
...... 因为查找列表项的 ID 是 1,但这在使用 Office365-REST-Python-Client 包时不起作用。
有没有办法使用这个包设置查找列?我尝试使用 ID 和 Text 值,但似乎没有任何效果。
我更愿意使用这个包而不是 Shareplum,因为 Shareplum 在其他方面似乎有缺陷。
任何指针将不胜感激。
解决方法
这个问题的答案相当简单 -
field_value = FieldLookupValue(lookup_id=1)
item_to_update.set_property("Department",field_value).update().execute_query()
Python Sharepoint库Office365-REST-Python-Client错误:401:未经授权的网址:https://mydomain.sharepoint.com/sites/sample/_api/Web
如何解决Python Sharepoint库Office365-REST-Python-Client错误:401:未经授权的网址:https://mydomain.sharepoint.com/sites/sample/_api/Web
我正在尝试使用App-only流作为共享点。
首先,我使用此URL https://mydomain.sharepoint.com/sites/sample/_layouts/15/appregnew.aspx创建了一个新的应用程序客户端ID和密码。
然后我转到URL https://mydomain.sharepoint.com/sites/sample/_layouts/15/appinv.aspx,以使用以下xml对此应用程序授予权限。
<AppPermissionRequests AllowAppOnlyPolicy="true"> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl"/> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl"/> </AppPermissionRequests>
并点击信任它。
我正在使用的代码:
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
site_url = ''https://mydomain.sharepoint.com/sites/sample/''
app_principal = {
''client_id'': ''.....-..'',''client_secret'': ''......='',}
context_auth = AuthenticationContext(url=site_url)
context_auth.acquire_token_for_app(client_id=app_principal[''client_id''],client_secret=app_principal[''client_secret''])
ctx = ClientContext(site_url,context_auth)
web=ctx.web
ctx.load(web)
ctx.execute_query()
if len(result) > 0:
print("Folder has been found: {0}".format(result[0].properties["Name"]))
但是会引发以下错误: Traceback (most recent call last): File "client.py",line 16,in <module> ctx.execute_query() File "C:\\Users\\AppData\\Local\\Programs\\Python\\python37\\lib\\site-packages\\office365\\runtime\\client_runtime_context.py",line 140,in execute_query self.pending_request().execute_query() File "C:\\Users\\AppData\\Local\\Programs\\Python\\python37\\lib\\site-packages\\office365\\runtime\\client_request.py",line 79,in execute_query raise ClientRequestException(*e.args,response=e.response) office365.runtime.client_request_exception.ClientRequestException: (None,None,''401 Client Error: Unauthorized for url: https://mydomain.sharepoint.com/sites/sample/_api/Web'')
需要帮助。
解决方法
我按照您的步骤进行操作,但是无法重现您的问题。
如果office365租户是最近创建的,则可以尝试在命令下面运行。
Set-SPOTenant -DisableCustomAppAuthentication $false
提示:您需要将SharePoint Online托管外壳程序更新为最新版本。
已更新:
今天关于使用 Python/身份验证连接到 SharePoint和python身份验证程序的介绍到此结束,谢谢您的阅读,有关.NET Core:使用 SharePoint API 将文件添加到 SharePoint、EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法、Office365-REST-Python-Client 似乎无法更新 Sharepoint 中的查找列、Python Sharepoint库Office365-REST-Python-Client错误:401:未经授权的网址:https://mydomain.sharepoint.com/sites/sample/_api/Web等更多相关知识的信息可以在本站进行查询。
本文标签: