Is it possible to Auth to an OAuth 2.0 API from inside a vscode extension

核能气质少年 提交于 2021-02-07 15:31:33

问题


My team writes a monitoring system which we have recently migrated the definitions of our monitoring into a git repo. These definitions are comprised of some json and powershell files. VSCode is an ideal scenario for editing and dealing with git. The problem is while developing the monitoring it is nice to be able to execute it against a test environment. Previously all editing was done through a web interface and we allowed ad hoc execution of the powershell against test machines through an API which is secured with AzureAD and OAuth2.0.

VS Code extensions don't have access to the full electron api and you are restricted from creating a BrowserWindow to handle the usual OAuth redirect flow. Is there a way to work around this limitation and allow a user to auth to our api so that we can make calls to it?

Any ideas or possible workarounds would be awesome.


回答1:


One thing you can do is to use Server to Server via Client Credentials authentication method. There is node npm library here. You will need to first register your VS code extension into Azure AD via Azure Portal. The downside of this method is the credential passed to the Web API won't be user's credential but rather same extension specific credentials. But it would be OK in case you don't need VS code user's identity.




回答2:


The supported way to get a user token for an application that doesn't have the ability to open a Web Browser to auth is the "OAuth Device Flow". Here is a link to a blog about how to implement it with AAD.

https://joonasw.net/view/device-code-flow




回答3:


You need to host a localhost webserver inside your extension, when you're doing the auth and then pass localhost:port as the redirect URI for the oauth login flow.



来源:https://stackoverflow.com/questions/38317735/is-it-possible-to-auth-to-an-oauth-2-0-api-from-inside-a-vscode-extension

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!