fixed msft access
This commit is contained in:
parent
1ea36ad5bc
commit
95dbbb8360
1 changed files with 31 additions and 4 deletions
|
|
@ -53,12 +53,15 @@ if not REDIRECT_URI:
|
|||
if CLIENT_SECRET and CLIENT_SECRET.startswith(("PROD_ENC:", "INT_ENC:", "DEV_ENC:")):
|
||||
logger.warning("Service_MSFT_CLIENT_SECRET appears to be encrypted - ensure decryption is working")
|
||||
SCOPES = [
|
||||
"Mail.ReadWrite", # Read and write mail (user's mailbox only)
|
||||
"Mail.Send", # Send mail (user's mailbox only)
|
||||
"User.Read", # Read user profile
|
||||
"Sites.ReadWrite", # Read and write user's SharePoint sites (not org-wide)
|
||||
"Files.ReadWrite" # Read and write user's files (not org-wide)
|
||||
"Mail.ReadWrite", # Read and write mail
|
||||
"Mail.Send", # Send mail
|
||||
"Files.ReadWrite.All", # Read and write files (SharePoint/OneDrive)
|
||||
"Sites.ReadWrite.All" # Read and write SharePoint sites
|
||||
]
|
||||
# NOTE: Sites.ReadWrite.All and Files.ReadWrite.All require admin consent.
|
||||
# An admin must grant consent ONCE at: /api/msft/adminconsent
|
||||
# After that, all users can connect without individual admin approval.
|
||||
|
||||
@router.get("/login")
|
||||
@limiter.limit("5/minute")
|
||||
|
|
@ -133,6 +136,30 @@ async def login(
|
|||
detail=f"Failed to initiate Microsoft login: {str(e)}"
|
||||
)
|
||||
|
||||
@router.get("/adminconsent")
|
||||
@limiter.limit("5/minute")
|
||||
async def adminconsent(request: Request) -> RedirectResponse:
|
||||
"""Initiate Microsoft Admin Consent flow.
|
||||
|
||||
An Azure AD admin must visit this URL once to grant consent for the entire tenant.
|
||||
After admin consent, all users can connect without individual approval.
|
||||
"""
|
||||
try:
|
||||
adminConsentRedirectUri = REDIRECT_URI.replace("/auth/callback", "/adminconsent/callback")
|
||||
adminConsentUrl = (
|
||||
f"{AUTHORITY}/adminconsent"
|
||||
f"?client_id={CLIENT_ID}"
|
||||
f"&redirect_uri={adminConsentRedirectUri}"
|
||||
)
|
||||
logger.info(f"Redirecting to admin consent URL for tenant: {TENANT_ID}")
|
||||
return RedirectResponse(adminConsentUrl)
|
||||
except Exception as e:
|
||||
logger.error(f"Error generating admin consent URL: {str(e)}")
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail=f"Failed to generate admin consent URL: {str(e)}"
|
||||
)
|
||||
|
||||
@router.get("/adminconsent/callback")
|
||||
async def adminconsent_callback(
|
||||
admin_consent: Optional[str] = Query(None),
|
||||
|
|
|
|||
Loading…
Reference in a new issue