MicrosoftDocs

Activity

Stars and mentions · Last 30 days, Oct 5 – Nov 3

GitHub stars92
Mentions7
036912Oct 5Oct 19Nov 3
UTC days · repositories MicrosoftDocs owns22 repositories

Top repositories

MicrosoftDocs’s repositories ranked by new stars, as on trending.

Loading

Contributes to

Repositories outside MicrosoftDocs’s account where MicrosoftDocs opened or reviewed pull requests in the past 365 days.

Who noticed MicrosoftDocs

Everyone who starred or forked MicrosoftDocs’s repositories since the archive began in 2011.

Notable accounts

Ordered by the stars their own repositories have received.

Biggest fans

Accounts that starred the most of these repositories.

Breakout weeks

Each repository’s best week of new stars, with the release published around it.

Mentions

8posts
Nov 42 posts
  1. How to Build Human-in-the-Loop AI Agents in C# with ASP.NET Core Build Human-in-the-Loop AI Agents in C# with ASP.NET Core !Image description Learn how to build human-in-the-loop AI agents in .NET with ASP.NET Core, approval workflows, EF Core, and SignalR for controlled AI automation. human-in-the-loop-ai-agents-dotnet` human-in-the-loop AI agents in .NET --- Introduction AI agents can call APIs, update customer records, create invoices, and interact with external systems. But letting an agent execute every action automatically isn't always a good idea. Consider a finance assistant that can prepare payment requests. It receives a request to transfer $15,000 to a supplier, understands it, finds the payment tool, and prepares the operation. Should the application run that payment immediately? For low-risk operations, maybe. For sensitive or high-impact ones, a human should review the proposed action first. That's the idea behind human-in-the-loop AI agents in .NET: a controlled approval step between the agent's decision and the execution of a sensitive operation. In this tutorial we'll design a practical approval workflow with C#, ASP.NET Core, Entity Framework Core, and SignalR. We'll create approval requests, store pending actions, let authorized users approve or reject them, and execute approved operations safely. 1. What Is Human-in-the-Loop AI? It's an architecture pattern where a human takes part in an AI-driven workflow at specific decision points. The application pauses selected operations until an authorized person reviews them: 1. A user sends a request to the agent. 2. The agent proposes an action through a tool or function. 3. The application checks whether the action requires approval. 4. An approval request is created and an authorized human reviews it. 5. The action is approved or rejected. 6. If approved, the application executes it, and the result is recorded. An agent may answer a product question on its own but require approval before issuing a refund, approving a payment, deleting a record, sending a contract, updating important customer information, or publishing generated content. The key distinction: the agent proposes, and the application decides whether the action can run. 2. The Workflow Architecture User Request | v AI Agent → Proposed Tool Action | v Application Validation | Does the action require approval? | No ─────────→ Execute Action → Return Result | Yes | v Create Approval → Human Review | Approve / Reject | | Execute Action Record Rejection | Save Result The components: the AI agent proposes actions, the tool layer validates arguments and decides if approval is needed, the approval service tracks requests, the database stores state, a review interface lets humans decide, and an execution worker runs approved actions. AI reasoning stays separate from business authorization and execution. 3. Set Up the Project and Model dotnet new webapi -n HumanApprovalAI cd HumanApprovalAI dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package Microsoft.EntityFrameworkCore.Design An approval request stores what a reviewer needs to understand what the agent wants to do: public enum ApprovalStatus { Pending, Approved, Rejected, Executing, Completed, Failed, Expired } public class ApprovalRequest { public Guid Id { get; set; } public string ActionName { get; set; } = ""; public string RequestedBy { get; set; } = ""; public string RequestedForTenant { get; set; } = ""; public string ArgumentsJson { get; set; } = ""; public string Reason { get; set; } = ""; public ApprovalStatus Status { get; set; } = ApprovalStatus.Pending; public string? ReviewedBy { get; set; } public DateTime CreatedAtUtc { get; set; } = DateTime.UtcNow; public DateTime ExpiresAtUtc { get; set; } public DateTime? ReviewedAtUtc { get; set; } public DateTime? ExecutedAtUtc { get; set; } public string? ExecutionResult { get; set; } } ArgumentsJson holds the proposed tool arguments, for example {"customerId": 1042, "refundAmount": 250, "currency": "USD"}. Never store passwords, API keys or tokens in approval records, and treat stored arguments as untrusted: the execution layer must validate them again. Register the context and apply the schema: public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options) { public DbSet<ApprovalRequest> ApprovalRequests => Set<ApprovalRequest>(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<ApprovalRequest>(entity => { entity.HasKey(x => x.Id); entity.Property(x => x.ActionName).HasMaxLength(150).IsRequired(); entity.Property(x => x.RequestedBy).HasMaxLength(200).IsRequired(); entity.Property(x => x.RequestedForTenant).HasMaxLength(100).IsRequired(); entity.Property(x => x.Status).HasConversion<string>(); entity.HasIndex(x => new { x.RequestedForTenant, x.Status, x.CreatedAtUtc }); }); } } builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); dotnet ef migrations add InitialApprovalSchema dotnet ef database update Keep connection strings in secure configuration, not in source control. 4. The Approval Service The service owns creating and managing requests: public record CreateApprovalDto( string ActionName, string ArgumentsJson, string Reason, DateTime ExpiresAtUtc); public class ApprovalService(AppDbContext db) { public async Task<Guid> CreateAsync(CreateApprovalDto request, string userId, string tenantId) { var approval = new ApprovalRequest { Id = Guid.NewGuid(), ActionName = request.ActionName, ArgumentsJson = request.ArgumentsJson, Reason = request.Reason, RequestedBy = userId, RequestedForTenant = tenantId, ExpiresAtUtc = request.ExpiresAtUtc, Status = ApprovalStatus.Pending }; db.ApprovalRequests.Add(approval); await db.SaveChangesAsync(); return approval.Id; } } builder.Services.AddScoped<ApprovalService>(); userId and tenantId must come from verified server-side identity, never from AI-generated arguments or untrusted request fields. 5. Approve and Reject Safely Reviewers need an API to list pending requests (restricted by an authorization policy, and by tenant scope in a multi-tenant app). An approve action must verify that the request exists, is still pending, hasn't expired, and that the reviewer is authorized. Use an atomic conditional update so two reviewers can't both win: [HttpPost("{id:guid}/approve")] [Authorize(Policy = "CanReviewApprovals")] public async Task<IActionResult> Approve(Guid id) { var reviewerId = User.FindFirstValue(ClaimTypes.NameIdentifier); if (string.IsNullOrWhiteSpace(reviewerId)) return Unauthorized(); var updated = await _db.ApprovalRequests .Where(x => x.Id == id && x.Status == ApprovalStatus.Pending && x.ExpiresAtUtc > DateTime.UtcNow) .ExecuteUpdateAsync(setters => setters .SetProperty(x => x.Status, ApprovalStatus.Approved) .SetProperty(x => x.ReviewedBy, reviewerId) .SetProperty(x => x.ReviewedAtUtc, DateTime.UtcNow)); return updated == 0 ? Conflict("Approval is unavailable, expired, or already reviewed.") : Ok(new { Message = "Approval recorded successfully." }); } Reject works the same way with ApprovalStatus.Rejected. A production version should also check tenant scope in the database predicate and write the decision to an audit log. 6. Execute Only Approved Actions Approving and executing are separate steps. The agent must never run the original tool call while approval is pending. A background worker finds approved requests and executes them: public interface IApprovedActionExecutor { Task ExecuteAsync(ApprovalRequest approval, CancellationToken cancellationToken); } public class ApprovalWorker(IServiceScopeFactory scopeFactory) : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { using var scope = scopeFactory.CreateScope(); var db = scope.ServiceProvider.GetRequiredService<AppDbContext>(); var executor = scope.ServiceProvider.GetRequiredService<IApprovedActionExecutor>(); var approvals = await db.ApprovalRequests .Where(x => x.Status == ApprovalStatus.Approved) .OrderBy(x => x.ReviewedAtUtc) .Take(10) .ToListAsync(stoppingToken); foreach (var approval in approvals) { try { await executor.ExecuteAsync(approval, stoppingToken); approval.Status = ApprovalStatus.Completed; approval.ExecutedAtUtc = DateTime.UtcNow; } catch (Exception) { approval.Status = ApprovalStatus.Failed; } await db.SaveChangesAsync(stoppingToken); } await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken); } } } builder.Services.AddHostedService<ApprovalWorker>(); This is a teaching example, not a production queue. Two workers could pick the same request, and a crash could happen after an external action succeeds but before the database updates. In production, claim work atomically (Approved → Executing), use a durable queue or transactional outbox, add retry policies, and use idempotency keys so a retry can never run the same payment or refund twice. 7. Notify Reviewers with SignalR Reviewers shouldn't have to refresh a dashboard. A SignalR hub can push new requests: [Authorize(Policy = "CanReviewApprovals")] public class ApprovalHub : Hub { } builder.Services.AddSignalR(); app.MapHub<ApprovalHub>("/hubs/approvals"); public class ApprovalNotifier(IHubContext<ApprovalHub> hub) { public Task NotifyReviewersAsync(Guid approvalId) => hub.Clients.All.SendAsync("ApprovalRequested", new { ApprovalId = approvalId, Message = "A new approval request is available." }); } In a real application, send notifications only to authorized reviewer groups or tenant-specific groups, not to every connected client. SignalR is optional: a dashboard that polls pending records works too. Docs: learn.microsoft.com 8. Connect the Workflow to an AI Agent Say the agent has a CreateRefundRequest function. It must not issue the refund. It creates an approval request: public class RefundTools(ApprovalService approvals, ITenantContext tenant, IUserContext user) { public async Task<string> CreateRefundRequest(int customerId, decimal amount, string reason) { if (amount <= 0) throw new ArgumentException("Refund amount must be positive."); var arguments = JsonSerializer.Serialize(new { CustomerId = customerId, Amount = amount, Reason = reason }); var approvalId = await approvals.CreateAsync( new CreateApprovalDto("IssueRefund", arguments, reason, DateTime.UtcNow.AddHours(24)), user.UserId, tenant.TenantId); return $"Refund request submitted for approval. Approval ID: {approvalId}"; } } The function only creates a pending request. The refund executor then independently validates that the customer belongs to the authorized tenant, the amount is within limits, the original transaction is refundable, the approval is valid and unexpired, and the action hasn't already run. If you use Microsoft Agent Framework, function-tool approval can pause an agent run when a tool needs human input and resume after an approval or rejection response. Reference: github.com/MicrosoftDocs/semantic-kernel-docs/blo… 9. Production Considerations - Expiration. Give every request an expiry (a payment request might expire after 24 hours). Expired requests must never run, even if a delayed worker finds them. - Role-based approval. Support agents approve small adjustments, finance managers approve payments, admins approve configuration changes. Enforce this with authorization policies. - Separation of duties. The person who requests a sensitive action shouldn't be the one who approves it. - Audit history. Record who requested it, what the AI proposed, the arguments, who decided, when, and whether execution succeeded. Keep secrets and unnecessary personal data out. - Idempotent execution. Use unique operation IDs and idempotency keys supported by the downstream service. - Durable state. Never keep pending approvals in memory. Persist them so the workflow survives restarts. 10. Test the Workflow | Test scenario | Expected behavior | |---|---| | AI proposes a sensitive action | Approval request is created | | Reviewer approves | Action becomes eligible for execution | | Reviewer rejects | Action is not executed | | Approval expires | Execution is blocked | | Two reviewers approve at once | Only one transition succeeds | | Unauthorized user approves | Request is denied | | Worker retries an operation | Duplicate execution is prevented | | Application restarts | Pending approvals remain available | | Invalid tool arguments | Request is rejected before execution | Conclusion Human-in-the-loop AI agents in .NET give you a practical way to let agents work on real business operations without giving them unchecked execution power. With C#, ASP.NET Core, EF Core, SQL Server and SignalR, you can store proposed actions, notify reviewers, record decisions, and run approved operations through controlled services. The principle is simple: let the AI propose, let humans approve sensitive decisions, and let deterministic application code control execution. More practical AI engineering guides for .NET developers: AI Engineering Foundry --- FAQ What is a human-in-the-loop AI agent? An AI system that pauses selected operations and asks for human input or approval before continuing. Should an agent execute an action before approval? No. Store the proposed operation and block execution until an authorized reviewer approves it. Can this be built in ASP.NET Core? Yes. ASP.NET Core handles approval APIs, authentication, authorization, background execution, persistence, and real-time notifications through SignalR. Is SignalR required? No. It only adds real-time notifications. A polling dashboard works too. --- References 1. Microsoft Agent Framework, function tools with human-in-the-loop approvals: github.com/MicrosoftDocs/semantic-kernel-docs/blo… 2. Microsoft Learn, Host ASP.NET Core SignalR in background services: learn.microsoft.com 3. Microsoft Learn, Human-in-the-loop process example: learn.microsoft.com

  2. FrontDoor **「利用者 → HTTPS/443 → Application Gateway → HTTP/80 → IIS」にする場合、管理する証明書はApplication Gateway側だけになります。** ただし、バックエンドをHTTPにしても、証明書の自動更新機能が追加されるわけではありません。 ご希望の**「証明書は無料・Azureが発行と自動更新を管理」**を満たすには、Front Doorを使います。 | 構成 | 自動化する方法 | |---|---| | **Application Gatewayの443を維持する** | Key Vaultと連携して証明書を自動反映。ただし、無料証明書の発行・更新にはLet’s Encryptなどの別の仕組みが必要 | | **Front Doorで443を受け付ける** | Front Doorの無料マネージド証明書で、Azureが発行・自動更新を管理 | Key Vault連携では、Application Gatewayが通常4時間ごとに更新済み証明書を取得します。これは**更新済み証明書の反映**を自動化する機能です。[Microsoft Learn](https://learn.microsoft.com/en-us/azure/application-gateway/renew-certificates?utm_source=chatgpt.com) Front Doorに任せ、ほかの区間をHTTPにするなら、構成は次のようになります。 **利用者 → HTTPS/443 → Front Door → HTTP/80 → Application Gateway → HTTP/80 → IIS** 設定の流れは以下です。 1. **Front Door Standard/Premium**を作成する。 2. 独自ドメインを登録し、DNSで所有確認する。 3. **Azureマネージド証明書**を選択する。 4. 独自ドメインのCNAMEをFront Doorへ向ける。 5. 転送先にApplication Gatewayを登録し、HTTP/80で転送するよう設定する。 6. Application Gateway側にHTTP/80のリスナーを用意し、IISへ転送する。 CNAMEをFront Doorへ直接向けることなど、自動更新の条件を満たして運用します。[GitHub](https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/frontdoor/end-to-end-tls.md?utm_source=chatgpt.com) **ただし、Front Door → Application Gatewayは、先ほど確認したVNet内の「Gateway → IIS」とは別の区間です。** パブリックIPへ接続する場合、MicrosoftはHTTPS転送を推奨しています。HTTPにするなら、その区間が暗号化されない構成を許容できるか確認が必要です。[Microsoft Learn](https://learn.microsoft.com/en-us/azure/frontdoor/end-to-end-tls?utm_source=chatgpt.com) 以下のMicrosoft公式ページが参照になります。 | 確認したい内容 | 公式ページ・確認箇所 | |---|---| | **Front Doorのマネージド証明書は無料で、Azureが管理する** | [カスタムドメインのHTTPSを構成する](https://learn.microsoft.com/ja-jp/azure/frontdoor/standard-premium/how-to-configure-https-custom-domain):「Azure Front Doorで管理される証明書」の説明 | | **Front Doorの証明書の自動更新条件** | [Azure Front Doorのドメイン](https://learn.microsoft.com/ja-jp/azure/frontdoor/domain):マネージド証明書のローテーション、CNAMEに関する説明 | | **DNSの所有確認・CNAME設定** | [カスタムドメインを追加する](https://learn.microsoft.com/ja-jp/azure/frontdoor/standard-premium/how-to-add-custom-domain):TXTレコードによる検証とDNS設定 | | **Front Doorから接続先へのHTTP/HTTPS通信・証明書要件** | [Azure Front DoorのエンドツーエンドTLS](https://learn.microsoft.com/ja-jp/azure/frontdoor/end-to-end-tls):接続先へのTLSと、HTTPS転送の推奨 | | **Application GatewayからIISへのHTTP/HTTPS設定** | [Application Gatewayのバックエンド設定](https://learn.microsoft.com/ja-jp/azure/application-gateway/configuration-http-settings):バックエンドのプロトコル・ポート | | **Key Vaultの更新済み証明書をGatewayへ自動反映する** | [Application Gatewayの証明書を更新する](https://learn.microsoft.com/ja-jp/azure/application-gateway/renew-certificates):Key Vaultを通常4時間間隔で確認する仕組み | **今回、特に確認していただきたいのは「Front DoorのエンドツーエンドTLS」です。** Front Doorの無料証明書が担当するのは**利用者 → Front Door**です。**Front Door → Application GatewayをHTTPSにする場合は、Gateway側にも別の証明書が必要**という点を確認できます。[learn.microsoft.com](https://learn.microsoft.com/en-us/azure/frontdoor/end-to-end-tls?utm_source=chatgpt.com) また、**Key Vaultへの自動反映と、証明書自体の発行・更新は別の機能**です。Key Vaultと認証局の連携については、[Key Vault証明書の更新について](https://learn.microsoft.com/ja-jp/azure/key-vault/certificates/overview-renew-certificate)を参照してください。

  3. JEA Endpoints Need Role and Session Review Together JEA Endpoints Need Role and Session Review Together Just Enough Administration (JEA) gives administrators a constrained PowerShell remoting endpoint with a defined set of commands and parameters. The operational benefit is clear: a help-desk role can reset a service or read a specific object without receiving full administrative rights. The security benefit depends on the role capability file and the session configuration being reviewed together. A broad role or an ordinary remoting endpoint can erase the restriction. Microsoft describes JEA as delegated administration for anything managed by PowerShell. Role capability files define commands, parameters, and sometimes values or script blocks. Session configuration files define the endpoint, the users who may connect, and the role mappings. The endpoint's ACL controls who can authenticate. Those pieces form one authority model. Start from the administrative task Write down the smallest operation that each role needs. For a DNS administrator, that may be reading a limited record set or restarting a named service. For a support role, it may be resetting one account property with a mandatory reason. Do not begin with a command list and remove obvious dangerous verbs. Begin with the task and derive the minimum command and parameter surface. Review wildcards, parameters that accept script blocks, arbitrary command paths, and functions that launch external programs. A constrained endpoint can still be dangerous if it exposes a command that evaluates user input or calls a script under a privileged account. Test role behavior rather than assuming that a visible command is harmless. Review who can connect Separate the endpoint ACL from the role capability. An account allowed to connect but mapped to no useful role should not remain in the ACL. Remove stale users and groups, and require a named administrative identity where the platform supports it. Log which role a session receives and which commands it runs. Use a dedicated endpoint rather than attaching JEA roles to the default PowerShell remoting configuration. Confirm that the virtual account or configured RunAs identity has only the required operating-system rights. Review transcript paths and event forwarding, and protect them from modification by the delegated user. Validate after change Run positive and negative tests for every role. Confirm that an approved operation succeeds and that an adjacent operation fails. Test an unknown command, an extra parameter, a direct WinRM connection to a non-JEA endpoint, and a reconnecting session. Check that the expected audit record is generated and reaches the central collector. JEA is a strong control when the role definition is narrow and the endpoint is the only practical route to the task. It can become a graphical facade over full administrative access when the role includes a shell escape, a general-purpose script runner, or a command with an unrestricted path. Review those edges before expanding the user population. The remaining risk includes misconfigured role capabilities, compromised delegated credentials, and gaps in audit retention. A successful review produces more than an allowlist. It shows which business task each role supports, who is entitled to it, how the endpoint is reached, and what evidence proves the restriction held. References - Microsoft Learn, Overview of Just Enough Administration - Microsoft Learn, JEA security considerations

  4. And before I get the "secretly Epic Games employees" or "Tim Sweeney's burner account" in my replies. Xbox Live on Android, iOS, Switch and PlayStation is available via a C library called XAL github.com/MicrosoftDocs/xbox-live-docs/blob/docs…

    9 views
  5. SharePoint Everyone Except External Users Not Working: A Read-First Claim, People Picker, and Public-Site Triage --- title: SharePoint Everyone Except External Users Not Working: A Read-First Claim, People Picker, and Public-Site Triage published: true description: SharePoint Everyone except external users missing? Read tenant claim flags, private-site picker rules, and Public team-site defaults first. tags: sharepoint, microsoft, sysadmin, powershell --- Helpdesk: "A site owner typed Everyone except external users in the People Picker on the Partners site and nothing came back. On the company intranet it used to show up. Can you just re-enable the Everyone group so they can share with the whole company?" Twenty minutes later a second ticket: a guest who accepted an invite last month can open a folder that was shared with Everyone, and Security wants that claim "turned off forever." Don't flip random claim switches yet. Everyone except external users (often shortened to EEEU) is a special SharePoint claim, not a security group you manage in the Microsoft 365 admin center. It only does what you expect when the whole chain holds: you know which claim you're talking about (Everyone vs Everyone except external users vs All Users) → the tenant still shows EEEU in People Picker (ShowEveryoneExceptExternalUsersClaim) → if the site is private, the private-site picker setting allows it (AllowEveryoneExceptExternalUsersClaimInPrivateSite, default off) → on a Public Microsoft 365 group-connected team site you understand the default Edit grant Microsoft documents → existing ACL entries still work even when the claim is hidden from the picker → you are not trying to "fix" external sharing with this claim. Microsoft's Set-SPOTenant docs and the default SharePoint groups article are the sources for that chain — not a blog tip that says "recreate the group." If the real problem is sharing with people outside the company (policies-don't-allow error, Anyone missing, old guest link access denied), that is a different stack. See SharePoint External Sharing Not Working. If a guest can't sign in at all, use AADSTS50020 or AADSTS53003. This post covers EEEU missing from People Picker, not granting the access you thought, or being confused with the Everyone claim. TL;DR - EEEU is a claim, not an Entra group. Microsoft says every user added to your organization automatically becomes a member. Guests who accepted invitations are not in it. You will not find it as a normal group in the Microsoft 365 admin center. - Missing in People Picker ≠ deleted. Set-SPOTenant -ShowEveryoneExceptExternalUsersClaim $false hides the claim from the picker. It does not remove permissions already granted with that claim. - Private sites hide it by default. AllowEveryoneExceptExternalUsersClaimInPrivateSite defaults to false, so EEEU is not available in the People Picker of a private site until an admin turns that on. - Public team sites grant Edit by default. On a Microsoft 365 group-connected team site set to Public, Microsoft says EEEU gets Edit and you can't change that default grant. Private group-connected sites do not get that automatic grant; you can add EEEU manually via Site permissions. - Everyone ≠ EEEU. Sharing with Everyone includes authenticated external users who previously accepted invitations. Sharing with EEEU is organization members only. Security tickets that say "a guest saw it" are often the wrong claim. - Don't "recreate Everyone except external users." You can't. Read the tenant claim flags and the site privacy setting first. --- Where in the chain did it break? | Step | What should be true | Typical symptom when it breaks | |---|---|---| | 1. Symptom captured | Exact wording: missing in picker vs access denied vs guest could open | "Permissions are broken" with no site URL or screenshot | | 2. Right claim | Ticket is about EEEU, not Everyone / All Users / a real security group | Guest accessed content shared with "Everyone" | | 3. Tenant picker flag | ShowEveryoneExceptExternalUsersClaim is $true | EEEU missing in People Picker on every site | | 4. Private-site flag | Private site has AllowEveryoneExceptExternalUsersClaimInPrivateSite $true if owners should pick it | Works on Public intranet; missing only on private sites | | 5. Site privacy / group | Public group-connected team site expected Edit for whole org; Private needs a manual add | "New private team can't share with company" | | 6. Existing ACL | Hidden claim still present on Site permissions / Sharing dialog Advanced | "We hid it but people still have access" (expected) | | 7. Not external sharing | Org/site sharing settings are a separate problem | Policies-don't-allow / Anyone missing — wrong article | Write down the site URL, whether the Microsoft 365 group (if any) is Public or Private, whether the owner used the modern Sharing dialog or classic Site permissions, the exact search string they typed, and whether a guest or an internal user is the one who can or can't open the content. Step 1: Capture the exact symptom (read-only) | What the user sees | Most likely layer | |---|---| | People Picker returns nothing for "Everyone except external users" on every site | Tenant ShowEveryoneExceptExternalUsersClaim is $false | | Same search works on the intranet / Public site, fails on a private site | AllowEveryoneExceptExternalUsersClaimInPrivateSite is $false (default) | | Public team site: whole company can edit; owner wants that gone | Default EEEU Edit on Public group-connected team sites (documented; not a People Picker bug) | | Private team: company-wide share never applied | No automatic EEEU grant on Private; claim may also be hidden in the private-site picker | | Guest opened content that was shared with Everyone | Wrong claim. Everyone includes invited guests | | Internal user can't open content that "was shared with everyone" | Check which claim or group is actually on the ACL; unique permissions; Information Barriers / Restricted Access Control if your tenant uses them | | Admin "disabled EEEU" but old shares still work | Expected. Hiding the claim does not strip existing grants | Microsoft's default groups article is explicit: EEEU is a special group that does not appear in the Microsoft 365 admin center. If someone asks you to "find the group and add members," stop — membership is automatic for organization users. Step 2: Map the three claims (read-only) | Claim | Who it includes (per Microsoft Set-SPOTenant docs) | People Picker control | |---|---|---| | Everyone except external users | All organization members in the tenant's Microsoft Entra ID; not users who previously accepted invitations (guests) | ShowEveryoneExceptExternalUsersClaim (default true = shown) | | Everyone | All authenticated users in the tenant's Microsoft Entra ID, including active external users who previously accepted invitations | ShowEveryoneClaim (default false on newer tenants; was true for many tenants older than March 2018) | | All Users (…) | Legacy authentication-method claim groups; All Users (authenticated) is equivalent to Everyone and shows as Everyone | ShowAllUsersClaim (default true = shown) | Extra private-site switch for EEEU only: | Setting | Default | Effect | |---|---|---| | AllowEveryoneExceptExternalUsersClaimInPrivateSite | false | When false, EEEU is not available in the People Picker of a private site | That table alone resolves most "it used to work on the company site but not on this project site" tickets: the project site is private, and the private-site picker flag is still at the default. Step 3: Read the tenant claim flags (read-only) SharePoint Online Management Shell, signed in as a SharePoint Administrator: # Read-only. Connect-SPOService -Url https://contoso-admin.sharepoint.com Get-SPOTenant | Select-Object ` ShowEveryoneExceptExternalUsersClaim, AllowEveryoneExceptExternalUsersClaimInPrivateSite, ShowEveryoneClaim, ShowAllUsersClaim, ProvisionSharedWithEveryoneFolder How to read the output: | Property | What $true means | What $false means | |---|---|---| | ShowEveryoneExceptExternalUsersClaim | EEEU appears in People Picker (default) | EEEU is hidden from People Picker tenant-wide | | AllowEveryoneExceptExternalUsersClaimInPrivateSite | EEEU can be picked on private sites | EEEU hidden on private sites (default) | | ShowEveryoneClaim | Everyone appears in People Picker | Everyone hidden (default on newer tenants) | | ShowAllUsersClaim | All Users claim groups appear | Those groups hidden | | ProvisionSharedWithEveryoneFolder | New OneDrive libraries get a "Shared with Everyone" folder (legacy default behavior changed in August 2015 — confirm against your tenant) | Folder not created for new OneDrive libraries | There is no SharePoint admin center toggle with the friendly name "Everyone except external users" on the main Sharing page. The People Picker visibility is a tenant PowerShell (or equivalent admin API) setting. If someone "fixed sharing" last quarter with a script, this is often where it landed. Step 4: Check site privacy and the Public-team default (read-only) For a Microsoft 365 group-connected team site, Microsoft documents: | Group / site privacy | Default EEEU behavior | |---|---| | Public | EEEU has a default permission level of Edit. You can't change that default grant on group-connected team sites. | | Private | No automatic EEEU grant. EEEU can be added manually through Site permissions. People Picker still obeys the private-site tenant flag above. | How to confirm privacy without changing anything: 1. Open the site → Settings (gear) → Site information (Microsoft's documented path to change privacy). 2. Note Public vs Private. 3. Open Settings → Site permissions (and Advanced permissions settings if you need the classic ACL) and look for Everyone except external users already listed. If the ticket is "the whole company can edit our Public team and we hate it," that is often by design for Public group-connected team sites. The fix is usually change the group to Private (after change control), not hunting for a broken EEEU group. Microsoft says you can't change the default EEEU permissions on those Public group-connected team sites. Communication sites and other non-group sites do not get that automatic Public-team EEEU Edit grant. On those, EEEU only appears if someone added it, and only if the picker flags allow selecting it. Step 5: Prove whether the claim is on the ACL (read-only) Hiding EEEU from People Picker does not remove it from sites where it was already granted. Before you "turn it back on" or "wipe permissions," read what is actually there: 1. Site → Settings → Site permissions. 2. Check membership of Owners / Members / Visitors and any SharePoint groups. 3. Use Advanced permissions settings → check for EEEU on the site, and for libraries/folders with unique permissions (broken inheritance). 4. For a single file/folder: Manage access / Advanced and note every principal. | Finding | Meaning | |---|---| | EEEU on site Visitors (Read) | Whole org (non-guest) can read; picker visibility is irrelevant to existing access | | EEEU on Public team Members-equivalent via default Edit | Expected Public group-connected behavior | | No EEEU on ACL; owner can't pick it | Picker flag / private-site flag problem, not "corrupt permissions" | | Everyone on ACL; guest can open | Wrong claim for an internal-only share | Related OneDrive legacy note: ProvisionSharedWithEveryoneFolder controls whether new OneDrive libraries get a "Shared with Everyone" folder. That is not the same as the EEEU claim in People Picker, but tickets sometimes blur "Shared with Everyone" and "Everyone except external users." Read both if the path is OneDrive. Step 6: Don't confuse this with external sharing | Ticket language | Go to | |---|---| | "Can't invite a vendor" / policies don't allow / Anyone greyed out | SharePoint External Sharing Not Working — org/site sharing level, domain lists, B2B | | "EEEU missing in the picker" / "whole company share" | This article — claim flags + site privacy | | "Guest can see something shared with Everyone" | This article Step 2 (wrong claim), then tighten the ACL | | Guest sign-in / AADSTS | Guest triage posts linked above | Turning external sharing off does not create the EEEU claim, and turning EEEU visibility on does not enable external sharing. They are separate controls. Step 7: Change one flag (only after the read) Only after Steps 1–6, and only with change control: # EXAMPLES — deliberate changes. Prefer one change, then retest People Picker. # Show EEEU again tenant-wide: # Set-SPOTenant -ShowEveryoneExceptExternalUsersClaim $true # Allow picking EEEU on private sites (default is false): # Set-SPOTenant -AllowEveryoneExceptExternalUsersClaimInPrivateSite $true # Hide Everyone (includes guests) from People Picker — common hardening: # Set-SPOTenant -ShowEveryoneClaim $false Retest: 1. Private site People Picker search for Everyone except external users. 2. Public site People Picker (should already work if the tenant flag is true). 3. Confirm you did not grant a new ACL entry just by showing the claim — visibility ≠ permission. If Information Barriers or Restricted Access Control are enabled in your tenant, broad principals can still fail in ways that look like "EEEU not working." Treat those as a separate compliance stack: confirm with your compliance admin before forcing EEEU onto a restricted site. --- When a change is justified | Finding | Prefer | Avoid | |---|---|---| | EEEU missing everywhere | Set ShowEveryoneExceptExternalUsersClaim $true after confirming policy allows org-wide picks | Recreating a "group" in Entra or M365 admin center | | Missing only on private sites | Set AllowEveryoneExceptExternalUsersClaimInPrivateSite $true if private-site owners should use it | Flipping the tenant Everyone claim | | Public team editable by whole company | Change group privacy to Private (with owner approval), then redesign membership | Trying to edit the default EEEU grant Microsoft says you can't change | | Guest accessed "company-wide" share | Remove Everyone / replace with EEEU or a real security group | Blaming external sharing settings alone | | Security wants no org-wide picks | Hide EEEU / Everyone in People Picker; educate owners to use security groups | Deleting site permissions blindly without an ACL inventory | | Old EEEU grants remain after hide | Inventory and remove site-by-site if policy requires | Assuming Show… $false stripped access | | Vendor can't be invited | Follow the external sharing triage article | Enabling EEEU to "fix" guest sharing | --- FAQ Why is SharePoint Everyone except external users not working? Usually one of: the tenant hid it with ShowEveryoneExceptExternalUsersClaim $false; the site is private and AllowEveryoneExceptExternalUsersClaimInPrivateSite is still at the default false; the owner expected the Public team-site default Edit grant on a Private site; or they confused EEEU with the Everyone claim (which includes guests). Read Get-SPOTenant for the claim flags, then Site information for Public vs Private. Why is Everyone except external users missing or not available in People Picker? Microsoft documents two switches. Tenant-wide: ShowEveryoneExceptExternalUsersClaim (default shown). Private sites: AllowEveryoneExceptExternalUsersClaimInPrivateSite (default not available). Hiding the claim does not delete existing permissions that already used it. Who is in Everyone except external users? Microsoft says all users added to your organization automatically become members. It is a special SharePoint group/claim that does not appear in the Microsoft 365 admin center. Guests who accepted invitations are excluded (that is the point of the name). What's the difference between Everyone and Everyone except external users? Per Set-SPOTenant: Everyone includes authenticated users in the tenant directory including active external users who previously accepted invitations. Everyone except external users is organization members only — not those invited guests. If a guest could open the content, check which principal is actually on the ACL. Can I remove Everyone except external users from a Public Microsoft 365 team site? Microsoft says you can't change the default permissions granted to EEEU on Microsoft 365 group-connected team sites. On Public group-connected team sites, EEEU gets Edit by default. The practical control is the group's privacy (Public vs Private) and deliberate membership, not editing that default grant. On Private group-connected sites, EEEU is not automatic; it can be added manually via Site permissions when the picker allows it. --- Related posts - SharePoint External Sharing Not Working (org/site sharing, domain lists, Entra B2B — different feature from EEEU) - AADSTS50020 User Account Does Not Exist in Tenant (guest can't sign in) - AADSTS53003 Blocked by Conditional Access (guest blocked at sign-in) - Restore a Deleted SharePoint Site, OneDrive, or File (when "can't access" is really "it's gone") - An Offboarding Checklist for M365 + Intune Admins (access removal when someone leaves — don't rely on EEEU alone) Free checklist Once People Picker and site permissions behave again, the next request is usually a Conditional Access or sharing lockdown that hits the same owners on Monday morning. Before you enforce, the free Conditional Access pre-enforcement checklist keeps break-glass accounts, pilot groups, and report-only review on one page: 👉 cashflow4375.gumroad.com If you want the Intune and Microsoft 365 admin runway (assignment, compliance, and day-2 ops checklists) in one pack for the next wave of "make SharePoint and devices match policy" work, the Intune & M365 Admin Starter Pack is here: cashflow4375.gumroad.com --- Admin Pack Studio; not affiliated with Microsoft. Steps 1–6 only read: site permissions UI and Get-SPOTenant. Changing ShowEveryoneExceptExternalUsersClaim, AllowEveryoneExceptExternalUsersClaimInPrivateSite, ShowEveryoneClaim, site/group privacy, and ACL membership are deliberate changes. Make one change, retest People Picker and access with an internal user and a guest test account, and check current Microsoft Learn for parameter defaults on your module version. <!-- sources: learn.microsoft.com learn.microsoft.com learn.microsoft.com github.com/MicrosoftDocs/OfficeDocs-Sharepoint-Po… Hedged / not settled Learn contracts: exact admin-center UI path to toggle ShowEveryoneExceptExternalUsersClaim (Learn documents PowerShell; no first-class Sharing-page toggle found this run — stated as PowerShell/API); propagation time after Set-SPOTenant claim flag changes (not documented as a fixed SLA — "retest People Picker" only); Information Barriers / Restricted Access Control interaction with EEEU described only as a separate stack to check, not as a full triage; ProvisionSharedWithEveryoneFolder August 2015 default-behavior change noted from Set-SPOTenant docs without re-deriving current tenant defaults; Get-SPOTenant property names taken from Set-SPOTenant parameters (verify against your module); ShowEveryoneClaim "tenants older than March 2018" default nuance from Set-SPOTenant docs. PowerShell not syntax-run (no pwsh on box). -->

  6. What is going on with Microsoft and JPEG XL? On 8 October they release Microsoft Edge 155, based on Chromium v155 which came with JPEG XL support. Microsoft even mentioned JPEG XL support in the release notes for Edge 155. It didn't appear to work, however. It appeared the support wasn't (entirely) there because on tests such as this one it showed that Edge 155 didn't support it. Brave browser, which also follows Chromium closely, updated to Chromium v155 a day later and that introduced JPEG XL support, without even any mention in their release notes. The following day MS removed "JPEG XL decoding support"from the Edge 155 release notes. Does anyone with a bit more technical insight into Edge and Windows have any idea what is happening? MS clearly wanted to release Edge with JPEG XL support or they wouldn't have added it to the release notes. There is an official JPEG XL Image Extension to support JPEG XL in Windows 11 in the Microsoft Store and, allegedly, after installing that JPEG XL also works in Microsoft Photos. Is the code there in the browser but just disabled behind a flag? Are they waiting on Webview2 to also support JPEG XL decoding across all Windows apps? The release notes for Webview2 Runtime 155.0.4283.45 do not mention JPEG XL support, even though presumably it is based on Chromium 155. Does Webview2 v155 already support JXL? The next Edge update is scheduled for around 22 October. Any chance it might be enabled then?

    24 points · 9 comments
  7. If you qualify: $1.70/h per fine-tuned deployment (about $1,241/month), retiring 14 Oct 2027, not extendable. Schedule source: MicrosoftDocs/azure-ai-docs

    2 likes · 4 views
  8. MicrosoftDocs/windows-dev-docs It appears to be a translation layer like apple Rosetta was and currently has for there arm hardware. Windows NT 4 for ppc had a software layer by I believe Motorola to run x86 programs on ppc

    1 like

Achievements

Awards earned by the repositories MicrosoftDocs owns. Select an award to embed its badge.

Gold
41st place finishes
Silver
152nd place finishes
Bronze
73rd place finishes
Awarded repositories
2Owned by MicrosoftDocs now

Repositories

Ordered by gold, then silver, then bronze.

  1. mslearn-tailspin-spacegame-webBest: 1st by forks, 246 forks4156
  2. azure-docsBest: 3rd by PR authors, 10 PR authors001

Every award

Top-three finishes of these repositories in completed trending days and weeks, newest first.

  1. azure-docs
  2. mslearn-tailspin-spacegame-web
  3. mslearn-tailspin-spacegame-web
  4. mslearn-tailspin-spacegame-web
  5. mslearn-tailspin-spacegame-web
  6. mslearn-tailspin-spacegame-web
  7. mslearn-tailspin-spacegame-web
  8. mslearn-tailspin-spacegame-web

A repository earns an award for finishing first, second or third in a completed trending day or week, ranked by new stars, new forks or pull request authors. Awards follow a repository through renames and transfers and count toward its current owner. Weeks run Monday to Sunday, UTC.