mcpField
U
umbraco-auth-provider

umbraco-auth-provider

github.com/umbraco安全27391 次安装6 周前更新
代码仓库

关于 umbraco-auth-provider

用于为 Umbraco 后台添加外部登录界面的技能,涵盖提供程序清单、默认或自定义登录按钮及重定向行为;后端认证需另行配置。

主要功能

  1. 01配置外部登录清单
  2. 02使用默认或自定义登录按钮
  3. 03自动重定向到提供程序
  4. 04设置弹窗与账户关联选项
  5. 05按文档指导实现

适用场景

  1. 01为 Umbraco 添加 OAuth 登录按钮
  2. 02构建自定义 SSO 登录界面
  3. 03设置自动跳转到身份提供程序

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-auth-provider

安装后在 Claude Code 中输入/umbraco-auth-provider确认已加载。

详细介绍

Umbraco 身份验证提供程序

这是什么?

身份验证提供程序可为 Umbraco 后台启用外部登录(OAuth/SSO)。它提供连接到后端身份验证提供程序的 UI 组件(登录按钮)。后端必须单独使用 C# 配置——此扩展类型负责前端展示和行为。常见的提供程序包括 Google、Microsoft、GitHub 和自定义 OAuth 提供程序。

文档

实施前务必获取最新文档:

工作流

  1. 获取文档 - 使用 WebFetch 访问上述 URL
  2. 提问 - 使用哪个 OAuth 提供程序?是否需要自定义 UI?是否自动重定向?
  3. 配置后端 - 先设置 C# 身份验证提供程序
  4. 生成前端文件 - 创建清单和可选的自定义元素
  5. 说明 - 展示创建的内容以及测试方法

最小示例

使用默认按钮的清单(umbraco-package.json)
{
  "name": "My Auth Provider",
  "extensions": [
    {
      "type": "authProvider",
      "alias": "My.AuthProvider.GitHub",
      "name": "GitHub Login",
      "forProviderName": "Umbraco.GitHub",
      "meta": {
        "label": "Login with GitHub",
        "defaultView": {
          "icon": "icon-github",
          "color": "default",
          "look": "secondary"
        }
      }
    }
  ]
}
清单(TypeScript)
import type { ManifestAuthProvider } from '@umbraco-cms/backoffice/extension-registry';

const manifest: ManifestAuthProvider = {
  type: 'authProvider',
  alias: 'My.AuthProvider.Google',
  name: 'Google Login',
  forProviderName: 'Umbraco.Google', // Must match backend provider name
  meta: {
    label: 'Sign in with Google',
    defaultView: {
      icon: 'icon-google',
      color: 'default',
      look: 'outline',
    },
    behavior: {
      autoRedirect: false,
      popupTarget: 'umbracoAuthPopup',
      popupFeatures: 'width=600,height=600,menubar=no,location=no',
    },
    linking: {
      allowManualLinking: true,
    },
  },
};

export const manifests = [manifest];
自定义登录按钮元素
import type { ManifestAuthProvider } from '@umbraco-cms/backoffice/extension-registry';

const manifest: ManifestAuthProvider = {
  type: 'authProvider',
  alias: 'My.AuthProvider.Custom',
  name: 'Custom SSO Login',
  forProviderName: 'Umbraco.CustomSSO',
  element: () => import('./custom-auth-button.element.js'),
  meta: {
    label: 'Enterprise SSO',
  },
};
自定义按钮元素(custom-auth-button.element.ts)
import { html, css, customElement, property } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';

@customElement('my-custom-auth-button')
export class MyCustomAuthButtonElement extends UmbLitElement {
  @property({ type: String })
  providerName = '';

  @property({ type: String })
  displayName = '';

  #handleClick() {
    // Dispatch event to trigger auth flow
    this.dispatchEvent(
      new CustomEvent('auth-request', {
        bubbles: true,
        composed: true,
        detail: { providerName: this.providerName },
      })
    );
  }

  render() {
    return html`
      <button @click=${this.#handleClick}>
        <img src="/App_Plugins/MyAuth/logo.svg" alt="" />
        <span>${this.displayName}</span>
      </button>
    `;
  }

  static styles = css`
    button {
      display: flex;
      align-items: center;
      gap: var(--uui-size-space-3);
      width: 100%;
      padding: var(--uui-size-space-4);
      border: 1px solid var(--uui-color-border);
      border-radius: var(--uui-border-radius);
      background: var(--uui-color-surface);
      cursor: pointer;
    }

    button:hover {
      background: var(--uui-color-surface-alt);
    }

    img {
      width: 24px;
      height: 24px;
    }
  `;
}

export default MyCustomAuthButtonElement;
自动重定向提供程序(单点登录)
const manifest: ManifestAuthProvider = {
  type: 'authProvider',
  alias: 'My.AuthProvider.EnterpriseSSO',
  name: 'Enterprise SSO',
  forProviderName: 'Umbraco.EnterpriseSSO',
  meta: {
    label: 'Enterprise Login',
    behavior: {
      autoRedirect: true, // Automatically redirects to provider
    },
  },
};
后端 C# 配置(供参考)
// Composer to register the provider
public class GitHubAuthenticationComposer : IComposer
{
    public void Compose(IUmbracoBuilder builder)
    {
        builder.AddBackOfficeExternalLogins(logins =>
        {
            logins.AddBackOfficeLogin(
                backOfficeAuthenticationBuilder =>
                {
                    backOfficeAuthenticationBuilder.AddGitHub(
                        backOfficeAuthenticationBuilder.SchemeForBackOffice("Umbraco.GitHub")!,
                        options =>
                        {
                            options.ClientId = "your-client-id";
                            options.ClientSecret = "your-client-secret";
                            options.CallbackPath = "/umbraco-github-signin";
                        });
                },
                options =>
                {
                    options.AutoLinkOptions = new ExternalSignInAutoLinkOptions(
                        autoLinkExternalAccount: true,
                        defaultUserGroups: new[] { "admin" }
                    );
                });
        });
    }
}

元属性

属性描述
label按钮文本
defaultView.icon按钮图标
defaultView.color按钮颜色(default、positive、warning、danger)
defaultView.look按钮样式(default、primary、secondary、outline)
behavior.autoRedirect在登录页面上自动重定向到提供程序
behavior.popupTarget弹出窗口名称
behavior.popupFeatures弹出窗口特性
linking.allowManualLinking允许关联现有账户

常用图标

  • icon-google - Google
  • icon-microsoft - Microsoft
  • icon-github - GitHub
  • icon-facebook - Facebook
  • icon-twitter / icon-x - Twitter/X
  • icon-cloud - 通用 OAuth

就是这样!务必获取最新文档,保持示例简洁,并生成完整可用的代码。

评论

支持 Markdown