apache / opendal

Apache OpenDAL: access data freely.
https://opendal.apache.org
Apache License 2.0
2.99k stars 417 forks source link

docs: Explain the meaning of OneDrive access token #4715

Open intgr opened 3 weeks ago

intgr commented 3 weeks ago

For background: the Rustic backup tool uses OpenDAL for cloud storage integration. The documentation is lacking on both sides. But I managed to reverse engineer that it expects the user to configure OpenDAL root & access_token (https://opendal.apache.org/docs/rust/opendal/services/struct.Onedrive.html#configuration) for OneDrive in a configuration file.

But there is no documentation on either side, what process needs to be performed to get an access token issued. Is this even something that a user should be exposed to? Or is it the application author's responsibility to provide a mechanism for requesting the access token?

But at the bare minimum, OpenDAL's documentation should document the expected format of this token (e.g. JWT token?) and reference relevant parts of Microsoft Graph API, and perhaps suggest a tool or library that can be used to request one.

Related discussion: https://github.com/apache/opendal/pull/2129#issuecomment-2156889316

intgr commented 3 weeks ago

Cross-posting relevant replies from @imWildCat https://github.com/apache/opendal/pull/2129#issue-1684266501

To get a working access_token for OneDrive, we can leverage https://crates.io/crates/graph-rs-sdk, especially its demo: https://github.com/sreeise/graph-rs-sdk/tree/master/examples/oauth

From https://github.com/apache/opendal/pull/2129#issuecomment-2156947182

If you'd like to check some tutorials, I did find a quick for you: https://www.youtube.com/watch?v=NljQx11YqNY

In general, OAuth flows for these big techs are pretty complex, sometimes replying on their own SDKs by default. I was working in MSFT. So I knew this very well. For example, if you'd like to use Graph API on iOS/macOS, you might want https://github.com/AzureAD/azure-activedirectory-library-for-objc Why this flow is always complicated? Because they must respect users' privacy and also data compliance, like GDPR. So it is always required something like "User Consent".

The goal of OpenDAL is just a light-weight wrapper of some data uploading / downloading apis. So this lib is not depending on any of these first-party SDKs provided by the service companies.

In my own company, I write these logic into Rust directly, referring to the sample code link I shared above. You'd better check them out before being surprised here. This flow would be easier for you if you write them in Rust for all the other big ones, like Google and/or Dropbox.

Xuanwo commented 3 weeks ago

Thanks a lot for raising up an issue. I'm going to setup the integration tests for one drive. Maybe I can finish the documentation at the same time.

And you are welcomed to provide a minimum PR to improve the existing docs a bit 🥰